在Xcode 9 Beta 4,Swift 4.0的最新版本上,NSObject 'responds‘方法似乎被打破了。
下面是在Xcode 8(工作正常)上测试的示例代码,在Xcode 9上,方法'responds‘在所有情况下都返回false。
任何帮助都将不胜感激。
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发布于 2017-07-28 10:56:53
responds方法没有什么问题。由于硒0160是在Swift 4中实现的,这些方法不再自动暴露在目标C中。
如果将@objc添加到每个方法签名的开头(希望向Objective公开),则会发现responds随后返回true。
public class Worker : NSObject
{
@objc public func work() { }
@objc public func eat(_ food: AnyObject) { }
@objc public func sleep(_ hours: Int,_ minutes: Int) { }
}或者,也可以将@objMembers添加到类中,以便将所有方法公开给Objective。
@objMembers
public class Worker : NSObject
{
public func work() { }
public func eat(_ food: AnyObject) { }
public func sleep(_ hours: Int,_ minutes: Int) { }
}第三个Selector语法是错误的。它应该是"sleep::",因为由于前面的_没有使用minutes标签。
https://stackoverflow.com/questions/45371024
复制相似问题