UIControl.appearance().addTarget 停止在 Swift 4 上工作

Posted

技术标签:

【中文标题】UIControl.appearance().addTarget 停止在 Swift 4 上工作【英文标题】:UIControl.appearance().addTarget stopped working on Swift 4 【发布时间】:2017-10-18 12:39:02 【问题描述】:

当我从 Swift 3.2 切换到 Swift 4.0 时,我的代码停止工作。它的目标是为所有 UIButtons 和 UISwitches 添加点击操作。

private func turnSound(state: Bool) 
    UIButton.appearance().isSoundEnabled = state
    UISwitch.appearance().isSoundEnabled = state

extension UIControl 
   var isSoundEnabled: Bool 
        get 
            return target(forAction: #selector(AudioManager.playStandardClickSound), withSender: nil) != nil ? true : false
        
        set 
            if newValue 
                addTarget(AudioManager.manager, action: #selector(AudioManager.playStandardClickSound), for: .touchUpInside)
             else 
                removeTarget(AudioManager.manager, action: #selector(AudioManager.playStandardClickSound), for: .touchUpInside)
            
        
    

之前运行良好,但现在出现异常:

'NSInvalidArgumentException', reason: '*** Illegal axis type, : for appearance setter, addTarget:action:forControlEvents:. Expected NSInteger or NSUInteger'

而且我不明白如何摆脱这个问题。

很乐意提供任何帮助或替代解决方案。

更新:

added sample project

【问题讨论】:

【参考方案1】:

您还需要将@objc 添加到您的扩展程序中:

@objc extension UIControl

附:归功于这个答案https://***.com/a/44391389/2241008

【讨论】:

就是这样。非常感谢!

以上是关于UIControl.appearance().addTarget 停止在 Swift 4 上工作的主要内容,如果未能解决你的问题,请参考以下文章

创龙AD+全志T3 ad_display 开发案例

C6678+K7+AD9253/AD9783 8路AD高速信号处理板

维生素ad滴剂的作用和功效

Windows安全基础-AD域

ad hoc,ad infinitum,ad interim,ad lib(英语中的直接拉丁外来词短语)用法

视频课程上线:AD账户清理_AD域日常维护实战