首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >关于performSelector返回值

关于performSelector返回值
EN

Stack Overflow用户
提问于 2015-11-02 19:09:13
回答 3查看 3.7K关注 0票数 4

大家都知道ios在swift2.0中支持" performSelector“我想知道怎样才能得到performSelector的返回值?

代码语言:javascript
复制
let returnValue:Unmanaged<AnyObject> = (self.dataSource?.performSelector("myselector:", withObject: self))!
let value : Int? = returnValue.takeRetainedValue() as? Int

在最后一行出现崩溃,如何在swift2.0中从"performSelector“中获取值?

EN

回答 3

Stack Overflow用户

发布于 2015-11-02 19:47:04

我认为目前Swift中的performSelector只支持符合AnyObject的返回值,在你的例子中,你有Int,它不支持。在这种情况下,performSelector将返回nil,并且您的代码将显式地展开可选的,从而导致程序崩溃。

因此,解决此问题的一种方法是创建一个返回NSNumber的方法。

您可以在游乐场中尝试以下代码:

代码语言:javascript
复制
@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()
票数 8
EN

Stack Overflow用户

发布于 2019-05-12 18:49:13

使用takeUnretainedValue

代码语言:javascript
复制
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

针对Swift 5进行了更新:

同样适用于NSSelectorFromString:假设您有一个名为aViewControllerUIViewController

代码语言:javascript
复制
let value = aViewController.perform(NSSelectorFromString("view")) //type of value is Unmanaged<AnyObject?>
let uvalue = value.takeUnretainedValue() //type of uvalue is now AnyObject?
let myView = value as? UIView //type of result is now UIView
票数 2
EN

Stack Overflow用户

发布于 2017-11-28 07:22:55

您可以通过以下方式获取performSelector的NSInteger结果

代码语言:javascript
复制
let returnValue = dataSource?.perform(#selector(myselector:), withObject: self)!
let value = Int(bitPattern: returnValue.toOpaque())
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33476214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档