gpt4 book ai didi

swift - Xcode 9 RespondsToSelector 问题

转载 作者:行者123 更新时间:2023-11-28 10:52:35 27 4
gpt4 key购买 nike

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

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

最佳答案

responds 方法没有任何问题。由于 SE-0160这是在 Swift 4 中实现的,这些方法不再自动暴露给 Objective-C。

如果您将@objc 添加到每个 方法签名(您想要公开给Objective-C)的开头,您会发现响应 然后返回 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-C 公开所有方法。

@objMembers
public class Worker : NSObject
{
public func work() { }
public func eat(_ food: AnyObject) { }
public func sleep(_ hours: Int,_ minutes: Int) { }
}

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

关于swift - Xcode 9 RespondsToSelector 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45371024/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com