2016-05-01 91 views
0

我正在閱讀由Apple發佈的Swift書。我有XCode 7.2.1 下面的代碼給出了一個編譯錯誤。我在遊樂場使用了代碼。Swfit關聯類型編譯錯誤

protocol Container { 
    associatedtype ItemType 
    mutating func append(item: ItemType) 
    var count: Int { get } 
    subscript(i: Int) -> ItemType { get } 
} 

您可以在頁面的後半部分看到代碼here

這裏的錯誤: enter image description here

我不知道這是否是對代碼變更權利;但是當我在協議改變1號線從

associatedtype ItemType 

typealias ItemType 

錯誤消失。

+1

「錯誤消失」但是升級到Xcode 7.3會更好。它有Swift 2.2,而Swift 3就在附近。你落後了,你在處理現代代碼時會遇到越來越多的麻煩(當Swift 3來臨時,你將會完全迷惑)。 – matt

回答

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中完美地工作。