4
最近,我正在閱讀「swift中的函數式編程」。在本書中,作者對Int進行了一些擴展以滿足協議Smaller
。爲了深入瞭解作者的想法,我將代碼複製到自己的操場上,但它報告錯誤。二元運算符不能應用於操作數
protocol Smaller {
static func smaller() -> Self?
}
extension Int: Smaller {
static func smaller() -> Int? {
//reporting error: Binary operator "==" cann't be applied to type of Int.type and Int
return self == 0 ? nil : self/2
}
}
看起來self == 0
是不允許在擴展名中。有沒有人知道原因。
我不知道迅速,但爲什麼在協議和擴展(返回類型)不同的方法的簽名? – trojanfoe
這是swift協議的規則,Self必須由類型本身替換。 – rrrain
在'static'方法中,關鍵字'self'指的是類型,而不是一個實際的實例,所以你不應該使用'static',因爲它看起來像你想處理'Int'的實例哦! –