【问题标题】:Swift 2, protocol extensions & respondsToSelectorSwift 2,协议扩展和响应选择器
【发布时间】:2015-06-25 20:40:05
【问题描述】:

我不确定,在我看来这是 Swift 2.0 中协议扩展的某种错误或错误实现。

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

我已经使一个类实例符合 protocolB,但是当通过 respondsToSelector 检查 protocolA/B 方法时,结果为 false。

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**
}

应该作为错误报告吗?

【问题讨论】:

  • 你应该提交一个错误。
  • 是的。您是否已经提交了错误? :)
  • 是的,确实是一个错误。你碰巧提交了吗?
  • 我已经提交了一个非常相似的错误bugs.swift.org/browse/SR-544
  • 上面对 Nick 的错误报告的回复表明这是一个功能,而不是错误,并且不会被修复。 respondsToSelector 不起作用,也不会使用协议扩展。

标签: swift cocoa swift2


【解决方案1】:

有趣。对我来说似乎是一个错误。它确实识别类上的函数,但不识别扩展上的函数。不管 Instance 有什么类型。此外,没有扩展代码将无法编译,因为协议方法是非可选的。所以真的看起来像一个错误/功能? in 响应选择器实现。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-10
    • 2017-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多