NSObject'回复'方法似乎在最新版本的Xcode 9 Beta 4,Swift 4.0版上被打破。
下面是在Xcode 8上测试的示例代码(工作正常),在Xcode 9上,方法'响应'在所有情况下都返回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
答案 0 :(得分:3)
responds
方法没有任何问题。由于在{8}中实现了SE-0160,因此这些方法不再自动暴露给Objective-C。
如果您将@objc
添加到每个方法签名的开头(您希望向Objective-C公开),您会发现responds
然后返回{{ 1}}。
true
或者,您也可以将public class Worker : NSObject
{
@objc public func work() { }
@objc public func eat(_ food: AnyObject) { }
@objc public func sleep(_ hours: Int,_ minutes: Int) { }
}
添加到类中,以将所有方法公开给Objective-C。
@objMembers
您的第三个@objMembers
public class Worker : NSObject
{
public func work() { }
public func eat(_ food: AnyObject) { }
public func sleep(_ hours: Int,_ minutes: Int) { }
}
语法错误。它应为Selector
,因为由于前面的"sleep::"
而未使用minutes
标签。