每个人都知道ios支持" performSelector"在swift2.0中 我想知道如何获取performSelector的返回值?
let returnValue:Unmanaged<AnyObject> = (self.dataSource?.performSelector("myselector:", withObject: self))!
let value : Int? = returnValue.takeRetainedValue() as? Int
最后一行出现崩溃,如何从&#34; performSelector&#34;中获取值?在swift2.0中?
答案 0 :(得分:6)
我认为目前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()
答案 1 :(得分:0)
使用takeUnretainedValue
:
let foo = Foo()
let value = foo.performSelector(Selector("bar")) //type of value is Unmanaged<AnyObject?>
let uvalue = value.takeUnretainedValue() //type of uvalue is now AnyObject?
let result = value as? String //type of result is now String
还可以与NSSelectorFromString一起使用:假设您有一个名为UIViewController
的{{1}}。快速的5种语法。
aViewController