2017-10-18 149 views
0

我有从Swift 3.2切换到Swift 4.0时停止工作的代码。它的目标是向所有UIButtons和UISwitches添加点击操作。UIControl.appearance()。addTarget在Swift上停止工作4

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' 

而且我不知道如何摆脱这个问题。

很高兴有任何帮助或替代解决方案。

UPDATE:

回答