检查Swift中的可选协议方法会出错吗?

Joh*_*ton 2 protocols optional swift

在阅读有关可选协议要求的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")  
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我收到错误: error: 'Bear' does not have a member named 'cough' if let cough = bear?.cough?() {

Mik*_*e S 5

你得到的错误是有道理的,因为Swift可以在编译时知道Bear没有实现cough()(而Objective-C不一定能够知道).

要编译代码,需要bear使用Bearable协议而不是Bear类来定义.

var bear: Bearable?
Run Code Online (Sandbox Code Playgroud)

无论如何,这可能是你想要的.否则,创建该协议没有多大意义.