Swift 4从“perform”函数调用中获取Bool结果

gblwokeq  于 2023-06-28  发布在  Swift
关注(0)|答案(2)|浏览(128)

我在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变量中获取布尔值。我已经尝试过的事情:

  • 传递一个inout Bool参数,在函数中设置它
  • UnsafeMutablePointer<Bool>传递给set in函数
  • 获取returnedValue.takeRetainedValue()

以上都失败了。那我该怎么处理这种情况

yizd12fk

yizd12fk1#

在使用ObjC运行时时时,请考虑您正在处理对象。ObjC签名为 performSelector:withObject
在Swift中,必须返回引用类型NSNumber示例,而不是值类型Bool

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

你必须取消引用指针

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

f5emj3cl2#

let obj = classType.perform(selector)
    if let obj = obj as? AnyObject {
        let pointer: UnsafeMutableRawPointer = Unmanaged<AnyObject>.passUnretained(obj).toOpaque()
        let valueBool: Bool = pointer.load(as: Bool.self)
        return valueBool
    }
    return false

相关问题