2015-04-28 21 views
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 
    } 

但是這不起作用,該分支沒有執行。

代碼中有什麼問題嗎?或者這可能是一個錯誤?

回答