【问题标题】:Perform Selector With Object in swift 3在 swift 3 中使用对象执行选择器
【发布时间】:2017-06-16 12:42:00
【问题描述】:

我正在尝试使用 swift 3.0

中的对象执行选择器

我有一个只有一个参数的选择器

func imageSelected(aImage : UIImage)

我这样称呼它

viewC.perform(Selector.init("imageSelected:"), with: image, afterDelay: 0.1)

但应用程序崩溃并显示选择器未定义的错误。

【问题讨论】:

    标签: ios swift3 selector ios10


    【解决方案1】:

    这是我在swift中遇到选择器时总是做的事情:忽略参数,只使用名称。

    你用过这个:

    imageSelected:
    

    : 在那里做什么?删除它!只需使用方法的名称!

    另外,还有这个很棒的 #selector 语法糖,请使用它:

    viewC.perform(#selector(imageSelected), with: image, afterDelay: 0.1)
    

    【讨论】:

    • 合成糖很可爱,但是这种方法在 Xcode10/macOS 10.13 中存在一个错误:我传入的任何 CGPoint 最终都为 (0.0, 9.223372036854776e+18)。只是把它放在这里,这样就可以省去别人很多麻烦。解决办法是设置一个临时变量,直接在延迟函数中访问。 (作为参数传递的其他对象似乎很好。)
    【解决方案2】:

    它开始运行良好,我修改了被调用的选择器

    来自

    func imageSelected(aImage : UIImage)
    

    到这里

    func imageSelected(_ aImage : UIImage)
    

    【讨论】:

    • 谢谢大家,这里的快速帮助
    • 无需添加_ 作为第一个参数标签,您仍然可以使用aImage 访问它,问题是您还需要在您的方法中添加您的类名。
    【解决方案3】:

    这适用于 swift 4.0

    perform(#selector(yourMethodHere), with: nil, afterDelay: 1)
    

    在函数前添加@objc 标志

    @objc public func yourMethodHere(){
         //your code here
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-27
      • 1970-01-01
      • 2018-01-14
      相关资源
      最近更新 更多