首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Xcode 9 RespondsToSelector问题

Xcode 9 RespondsToSelector问题
EN

Stack Overflow用户
提问于 2017-07-28 10:24:36
回答 1查看 889关注 0票数 0

在Xcode 9 Beta 4,Swift 4.0的最新版本上,NSObject 'responds‘方法似乎被打破了。

下面是在Xcode 8(工作正常)上测试的示例代码,在Xcode 9上,方法'responds‘在所有情况下都返回false。

任何帮助都将不胜感激。

代码语言:javascript
复制
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

来源:https://stackoverflow.com/a/24168825

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-28 10:56:53

responds方法没有什么问题。由于硒0160是在Swift 4中实现的,这些方法不再自动暴露在目标C中。

如果将@objc添加到每个方法签名的开头(希望向Objective公开),则会发现responds随后返回true

代码语言:javascript
复制
public class Worker : NSObject
{
    @objc public func work() { }
    @objc public func eat(_ food: AnyObject) { }
    @objc public func sleep(_ hours: Int,_ minutes: Int) { }
}

或者,也可以将@objMembers添加到类中,以便将所有方法公开给Objective。

代码语言:javascript
复制
@objMembers
public class Worker : NSObject
{
    public func work() { }
    public func eat(_ food: AnyObject) { }
    public func sleep(_ hours: Int,_ minutes: Int) { }
}

第三个Selector语法是错误的。它应该是"sleep::",因为由于前面的_没有使用minutes标签。

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

https://stackoverflow.com/questions/45371024

复制
相关文章

相似问题

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