2014-09-10 50 views
0

變異仍嘗試迅速,我過這個問題(不知道它是否真的歸類爲一個)在結構斯威夫特的功能相同名稱

因此,我們有協議,並繼承了它的結構來了。

protocol ExampleProtocol { 
var simpleDescription: String { get } 
func adjust() 
} 

struct SimpleStructure : ExampleProtocol{ 
    var simpleDescription = "A simple structure" 

    mutating func adjust() { 
     simpleDescription += " (adjusted)" 
    } 

    func adjust() { //I created this second method just to conform to the protocol 
    } 
} 


var b = SimpleStructure() 
b.adjust() //This generates a compiler error mentioning Ambiguity (Correct) 

問題是我該如何調用mutating adjust()而不是從協議調整。即我知道我是否將b聲明爲協議並將其初始化爲將從協議調用的結構,但是如何調用第一個調整?或者不可能?還是我錯誤地使用它?

乾杯,

回答

1

您的代碼無法編譯,但錯誤是通過添加mutating屬性重新定義adjust方法 - 不創建的adjust重載版本。

在我看來,這是正確的代碼:

protocol ExampleProtocol { 
    var simpleDescription: String { get } 
    mutating func adjust() 
} 

struct SimpleStructure : ExampleProtocol{ 
    var simpleDescription = "A simple structure" 

    mutating func adjust() { 
     simpleDescription += " (adjusted)" 
    } 
} 

意思是:你必須定義adjust功能在協議中mutating