首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift 2,协议扩展和respondsToSelector

Swift 2,协议扩展和respondsToSelector
EN

Stack Overflow用户
提问于 2015-06-25 20:40:05
回答 1查看 814关注 0票数 6

我不确定,在我看来,这是某种错误或在SWIFT2.0中使用协议扩展的糟糕实现。

我有protocolA、protocolB扩展protocolA和protocolB扩展中的实现方法。

我已经确认了一个类实例符合protocolB,但是当respondsToSelector检查协议A/B方法时,结果是假的。

代码语言:javascript
复制
import Cocoa
import XCPlayground

protocol ProtocolA : NSObjectProtocol {
  func functionA()
}

protocol ProtocolB : ProtocolA {
  func functionB()
}

extension ProtocolB {
   func functionA() {
     print("Passed functionA")
   }

   func functionB() {
     print("Passed functionB")
   }
}

class TestClass : NSObject, ProtocolB {

    override init () {

    }
}

var instance:TestClass = TestClass()
instance.functionA() // Calls code OK..

if instance.respondsToSelector("functionA") {
    print("Responds to functionA") // **False, never passing here**
}

if instance.respondsToSelector("functionB") {
    print("Responds to functionB") // **False, never passing here**
}

应该被报告为窃听器吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-25 20:58:13

有意思的。在我看来是个虫子。它确实识别类上的函数,但不识别扩展上的函数。无论实例具有何种类型。此外,如果没有扩展代码,就无法编译,因为协议方法是不可选的。所以看起来真的像个bug/特性吗?在响应选择器实现。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31060365

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档