我在谷歌上搜索过,但没能找到swift相当于respondsToSelector:的数字.

这是我能找到的唯一一件事(Swift alternative to respondsToSelector:),但在我的 case 中并不是太重要,因为它判断委托的存在,我没有委托,我只想判断在设备上运行时是否存在新的API,如果没有,则返回到以前的API版本.

推荐答案

如前所述,在Swift most of the time you can achieve what you need with the 100 optional unwrapper operator中.这允许您在且仅当对象存在(不是nil)且方法已实现时,对对象调用方法.

如果你仍然需要respondsToSelector:,它仍然是NSObject协议的一部分.

如果您在Swift中使用Obj-C类型拨打respondsToSelector:,则其工作原理与您预期的相同.如果您在自己的Swift类上使用它,您需要确保您的类来自NSObject.

下面是一个Swift类的示例,您可以判断它是否响应 Select 器:

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

let worker = Worker()

let canWork = worker.respondsToSelector(Selector("work"))   // true
let canEat = worker.respondsToSelector(Selector("eat:"))    // true
let canSleep = worker.respondsToSelector(Selector("sleep:minutes:"))    // true
let canQuit = worker.respondsToSelector(Selector("quit"))   // false

重要的是不要遗漏参数名称.在这个例子中,Selector("sleep::")not,与Selector("sleep:minutes:")相同.

Swift相关问答推荐

如何在Swift 中创建移动的uil标签?

try 在小部件内部读取核心数据的SwiftUI总是返回空吗?

为什么ClosedRange<;Int&>包含的速度比预期慢340万倍?

Observable.create 捕获行为

如何使用可搜索在搜索栏中搜索包括>或<?

为什么无法在 Swift 中使用AVFoundation扫描 QRCode

为什么 XUIView 中的 Binding 看不到更新后的值?

为什么我在我的 Swift iOS 应用程序项目中收到 Xcode 中的错误消息无法识别的 Select 器发送到类?

从 iPhone 中的安全飞地获取真正的随机数?

为什么 NumberFormatter 在 Swift 中将 19,999,999,999,999,999 格式化为 20,000,000,000,000,000?

关联满足约束时的快速协议方法

有什么方法可以快速为泛型参数分配默认值?

为什么 `map(foo)` 和 `map{ foo($0) }` 返回不同的结果?

找不到目标AAA的 SPM 工件 - 仅限 Xcode 13.3

Swift 动画 WithDuration 语法是什么?

Swift:创建 UIImage 数组

UILabel 文本不换行

在 Swiftui 中是否有一种简单的方法可以通过捏合来放大图像?

在 Swift 中子类化 NSObject - 初始化器的最佳实践

如何快速将弹出框调整为表格视图中内容的大小?