可选协议要求,我无法让它工作
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 运行时无法找到 属性。
我正在处理 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 运行时无法找到 属性。