Xcode 9 RespondsToSelector 问题
Xcode 9 RespondsToSelector Issue
NSObject 'responds' 方法似乎在最新版本 Xcode 9 Beta 4,Swift 4.0.
上被破坏
下面是在 Xcode 8 上测试的示例代码(工作正常),在 Xcode 9 上测试的方法 'responds' returns 在所有情况下都是错误的。
如有任何帮助,我们将不胜感激。
public class Worker : NSObject
{
public func work() { }
public func eat(_ food: AnyObject) { }
public func sleep(_ hours: Int,_ minutes: Int) { }
}
let worker = Worker()
let canWork = worker.responds(to: Selector(("work"))) // true
let canEat = worker.responds(to: Selector(("eat:"))) // true
let canSleep = worker.responds(to: Selector(("sleep:minutes:"))) // true
let canQuit = worker.responds(to: Selector(("quit"))) // false
示例来源:
responds
方法没有问题。由于 SE-0160 在 Swift 4 中实现,这些方法不再自动暴露给 Objective-C.
如果您将 @objc
添加到 each 方法签名(您想要公开给 Objective-C)的开头,您会发现 responds
然后 returns true
.
public class Worker : NSObject
{
@objc public func work() { }
@objc public func eat(_ food: AnyObject) { }
@objc public func sleep(_ hours: Int,_ minutes: Int) { }
}
或者,您也可以将 @objMembers
添加到 class 以将 所有 方法公开给 Objective-C.
@objMembers
public class Worker : NSObject
{
public func work() { }
public func eat(_ food: AnyObject) { }
public func sleep(_ hours: Int,_ minutes: Int) { }
}
您的第三个 Selector
语法错误。应该是"sleep::"
因为前面的_
.
没有使用minutes
标签
NSObject 'responds' 方法似乎在最新版本 Xcode 9 Beta 4,Swift 4.0.
上被破坏下面是在 Xcode 8 上测试的示例代码(工作正常),在 Xcode 9 上测试的方法 'responds' returns 在所有情况下都是错误的。
如有任何帮助,我们将不胜感激。
public class Worker : NSObject
{
public func work() { }
public func eat(_ food: AnyObject) { }
public func sleep(_ hours: Int,_ minutes: Int) { }
}
let worker = Worker()
let canWork = worker.responds(to: Selector(("work"))) // true
let canEat = worker.responds(to: Selector(("eat:"))) // true
let canSleep = worker.responds(to: Selector(("sleep:minutes:"))) // true
let canQuit = worker.responds(to: Selector(("quit"))) // false
示例来源:
responds
方法没有问题。由于 SE-0160 在 Swift 4 中实现,这些方法不再自动暴露给 Objective-C.
如果您将 @objc
添加到 each 方法签名(您想要公开给 Objective-C)的开头,您会发现 responds
然后 returns true
.
public class Worker : NSObject
{
@objc public func work() { }
@objc public func eat(_ food: AnyObject) { }
@objc public func sleep(_ hours: Int,_ minutes: Int) { }
}
或者,您也可以将 @objMembers
添加到 class 以将 所有 方法公开给 Objective-C.
@objMembers
public class Worker : NSObject
{
public func work() { }
public func eat(_ food: AnyObject) { }
public func sleep(_ hours: Int,_ minutes: Int) { }
}
您的第三个 Selector
语法错误。应该是"sleep::"
因为前面的_
.
minutes
标签