1
我正在關注來自Apple的this example,並且可選鏈不按預期工作。可選鏈不適用於可選協議要求
沒有與可選屬性和功能的協議:
@objc protocol CounterDataSource {
optional func incrementForCount(count: Int) -> Int
optional var fixedIncrement: Int { get }
}
符合上述協議A類:
class ThreeSource: CounterDataSource {
let fixedIncrement = 3
}
並使用一個可選屬性(數據源)的一類符合該協議:
@objc class Counter {
var count = 0
var dataSource: CounterDataSource?
func increment() {
if let amount = dataSource?.incrementForCount?(count) {
count += amount
} else if let amount = dataSource?.fixedIncrement {
count += amount
}
}
}
最後當談到使用計數實例的時候呃,有一個非空dataSource特性,它並不像預期的那樣:
var counter = Counter()
counter.dataSource = ThreeSource()
for _ in 1...4 {
counter.increment()
println(counter.count)
}
如果我沒有錯,並按照本教程中,我們應該得到印3,6,9,12,但是我只得到0,0,0,0。
這裏是Counter類可選鏈,預計將分配值3(由於ThreeSource的fixedIncrement屬性)達:
} else if let amount = dataSource?.fixedIncrement {
count += amount
}
但是這不起作用,該分支沒有執行。
代碼中有什麼問題嗎?或者這可能是一個錯誤?