在阅读有关可选协议要求的Apple文档后,它说您可以使用可选链接来检查实现。我尝试了这个,我一直收到错误。看起来这不再是这样做的有效方式,我试图找出现在是否有新的方法来做到这一点。
以下是一个示例,您可以看到错误:http://swiftstub.com/743693493/
这是我的代码:
@objc protocol Bearable {
func growl()
optional func cough() -> String //Apparently bears cough when they are scared.
}
@objc class Bear:Bearable {
var name = "Black Bear"
func growl() {
println("Growllll!!!")
}
}
@objc class Forest {
var bear:Bear?
func scareBears() {
if let cough = bear?.cough?() {
println(cough)
} else {
println("bear was scared")
}
}
}
我收到错误:error: 'Bear' does not have a member named 'cough'
if let cough = bear?.cough?() {
答案 0 :(得分:5)
你得到的错误是有道理的,因为Swift在编译时可以知道Bear
没有实现cough()
(而Objective-C不一定能够知道那个)。
要编译代码,您需要使用bear
协议而不是Bearable
类来定义Bear
。
var bear: Bearable?
无论如何,这可能是你想要的。否则,创建该协议没有多大意义。