大家都知道ios在swift2.0中支持“performSelector”
我想知道如何获得 performSelector 返回值?
let returnValue:Unmanaged<AnyObject> = (self.dataSource?.performSelector("myselector:", withObject: self))!
let value : Int? = returnValue.takeRetainedValue() as? Int
最后一行发生崩溃,如何从 swift2.0 中的“performSelector”获取值?
最佳答案
我认为目前 Swift 中的 performSelector 仅支持符合 AnyObject
的返回值,在您的情况下,您有 Int 不支持。在这种情况下, performSelector 将返回 nil,并且您的代码显式地解开 Optional 使程序崩溃。
因此,解决此问题的一种方法是创建一个返回 NSNumber 的方法。
你可以在操场上试试这个代码:
@objc class B: NSObject {
func myselector(arg: A) -> NSNumber {
return 0
}
}
@objc class A: NSObject {
var dataSource: B? = B()
func a() -> Int {
let returnValue = self.dataSource?.performSelector("myselector:", withObject: self)
let value = returnValue?.takeRetainedValue() as! NSNumber
return value.integerValue
}
}
A().a()
关于swift - 关于 performSelector 返回值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33476214/