首页 > 解决方案 > Swift 4 从“执行”函数调用中获取布尔结果

问题描述

我在 Swift 中有这样的函数:

@objc func doSomeStuff(_ args: [String]) -> Bool {
    return true
}

我在 String 变量中有一个选择器名称来执行。这是我的初始值:

let sel = Selector("doSomeStuff:")
let args = ["123123", "qweqweqwe"]

问题是当我试图接收这样的函数计算结果时:

let returnedValue = perform(sel, with: args)

因为那个地方我不知道如何从returnedValue变量中获取布尔值。我已经尝试过的事情:

以上都失败了。那么,我应该如何处理这种情况呢?

标签: swiftselector

解决方案


当您使用 ObjC 运行时时,请考虑您正在处理对象。ObjC 签名是performSelector:with Object

在 Swift 中你必须返回一个引用类型NSNumber实例而不是值类型Bool

@objc func doSomeStuff(_ args: [String]) -> NSNumber  {
    return NSNumber(booleanLiteral: true)
}

你必须取消引用指针

let result = perform(sel, with: args)
let number = result!.takeUnretainedValue()

推荐阅读