可选协议要求,我无法让它工作

Optional Protocol Requirements, I Can't Get It To Work

我正在处理 Swift 编程语言 一书中与可选协议要求相关的示例之一。我在以下代码中遇到问题。

import Foundation

@objc protocol CounterDataSource {
    optional func incrementForCount(count: Int) -> Int
    optional var fixedIncrement: Int { get }
}

@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
        }
    }
}

class ThreeSource: CounterDataSource {
    var fixedIncrement = 3
}

var counter = Counter()
counter.dataSource = ThreeSource()

for _ in 1...4 {
    counter.increment()
    println(counter.count)
}

这行不通吗? println() 连续输出 0,而它应该递增 3 秒。

@objc protocol 需要 @objc 实施。

你的情况:

class ThreeSource: CounterDataSource {
    @objc var fixedIncrement = 3
//  ^^^^^ YOU NEED THIS!
}

没有它,Objective-C 运行时无法找到 属性。