Swift 4: 实例化关联类型数组时无法调用非函数类型 '[Self.Element.Type]' 的值
Swift 4 : Cannot call value of non-function type '[Self.Element.Type]' when instantiating associated type array
我在这篇文章 (https://www.uraimo.com/2016/01/06/10-Swift-One-Liners-To-Impress-Your-Friends/) 的 Xcode 9 beta 2 Swift 4 上做了一些练习,当我在做项目编号时遇到错误。 6:
extension Sequence{
typealias Element = Self.Iterator.Element
func partitionBy(fu: (Element)->Bool)->([Element],[Element]){
var first=[Element]()
var second=[Element]()
for el in self {
if fu(el) {
first.append(el)
}else{
second.append(el)
}
}
return (first,second)
}
}
Xcode 9 在以下行中抛出错误:
var first=[Element]()
var second=[Element]()
完整错误如下:
error: Swift-Playground.playground:6:29: error: cannot call value of non-function type '[Self.Element.Type]'
var second=[Element]()
即使我删除类型别名并使用完整的 Self.Iterator.Element
类型,错误仍然存在。
此代码在 Swift 上完美运行 3. 我看不出它为什么不能在 Swift 上运行 4. 如果 Swift 有变化,有人可以帮我吗4 在处理关联类型方面,如果是,实例化数组的替代方案是什么。
在Swift4中,protocol Sequence
已经定义了
associatedtype Element where Self.Element == Self.Iterator.Element
所以你可以删除
typealias Element = Self.Iterator.Element
编译。
我在这篇文章 (https://www.uraimo.com/2016/01/06/10-Swift-One-Liners-To-Impress-Your-Friends/) 的 Xcode 9 beta 2 Swift 4 上做了一些练习,当我在做项目编号时遇到错误。 6:
extension Sequence{
typealias Element = Self.Iterator.Element
func partitionBy(fu: (Element)->Bool)->([Element],[Element]){
var first=[Element]()
var second=[Element]()
for el in self {
if fu(el) {
first.append(el)
}else{
second.append(el)
}
}
return (first,second)
}
}
Xcode 9 在以下行中抛出错误:
var first=[Element]()
var second=[Element]()
完整错误如下:
error: Swift-Playground.playground:6:29: error: cannot call value of non-function type '[Self.Element.Type]'
var second=[Element]()
即使我删除类型别名并使用完整的 Self.Iterator.Element
类型,错误仍然存在。
此代码在 Swift 上完美运行 3. 我看不出它为什么不能在 Swift 上运行 4. 如果 Swift 有变化,有人可以帮我吗4 在处理关联类型方面,如果是,实例化数组的替代方案是什么。
在Swift4中,protocol Sequence
已经定义了
associatedtype Element where Self.Element == Self.Iterator.Element
所以你可以删除
typealias Element = Self.Iterator.Element
编译。