我试图更好地理解 Swift 中的协议。特别是可选的协议方法。我认为这个问题可能与我在不同文件中定义/使用的协议有关,但如果你将以下内容放在操场上,你会遇到同样的问题:
import Foundation
@objc protocol MyProtocol {
optional func shouldJump() -> Bool
}
extension NSObject : MyProtocol {}
class Test {
func testJump() {
let object = NSObject()
let jump = object.shouldJump?() ?? true
print("should jump: \(jump)")
}
}
let t = Test()
t.testJump()
这是错误消息:
error: value of type 'NSObject' has no member 'shouldJump'
let jump = object.shouldJump?() ?? true
^~~~~~ ~~~~~~~~~~
出于某种原因,它不接受协议已在 NSObject 上定义。代码完成找到它,但编译器不让它通过。
我不确定我的?? true
部分是否有效,但我希望这是一个默认值,以防方法未定义。
我怎样才能让它工作?