我正在阅读Apple发布的Swift书。我有XCode 7.2.1 下面的代码给出了编译错误。我在操场上使用了这段代码。
protocol Container {
associatedtype ItemType
mutating func append(item: ItemType)
var count: Int { get }
subscript(i: Int) -> ItemType { get }
}
您可以在页面的后半部分看到代码here。
我不确定这是否是对代码的正确更改;但是当我从
中更改协议中的第一行时associatedtype ItemType
到
typealias ItemType
错误消失了。
答案 0 :(得分:1)
Xcode 7.2.1仍然在Swift 2.1上。
使用Xcode 7.3,当前版本的Xcode,Xcode开始使用Swift 2.2版。
在Swift版本2.1和2.2之间,协议中typealias
的使用已更改为新的associatedType
关键字。
所以说到这一点,你在Apple发布的Swift书中看到的文档已经更新为Swift 2.2语法,但你使用的是尚未更新为Swift 2.2语法的Xcode版本爱好。
因此,正如您所知,通过在协议中使用typealias
代替associatedType
,它将在Xcode 7.2.1中正确编译。
但是应该建议如果可能的话,继续升级到Xcode 7.3并使用Swift 2.2。如果你这样做,Apple的Swift书中更新的Swift 2.2示例将在你的Xcode中完美地运行。
答案 1 :(得分:-1)
是的,关键字确实在Swift 2.2版中发生了变化。 https://github.com/apple/swift-evolution/blob/master/proposals/0011-replace-typealias-associated.md