大家都知道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/

10-10 21:04