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

时间:2017-10-18 12:39:03

标签: ios swift3 swift4

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

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'

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

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

更新

1 个答案:

答案 0 :(得分:1)

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

@objc extension UIControl

P.S。积分转到了这个答案https://stackoverflow.com/a/44391389/2241008