这应该工作,但我不知道为什么它不。代码是不言自明的。
class Themer {
class func applyTheme(_ object: inout NSObject) {
//do theming
}
}
和我应用主题按钮,像这样:
class ViewController: UIViewController {
@IBOutlet weak var button: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
Themer.applyTheme(&button)
}
button对象是一个变量,但是编译器会抛出一个错误
因为button是一个对象,所以这个语法
Themer.applyTheme(&button)
表示要更改对该对象的引用。但这不是你想要的。如果要更改引用的对象,只需写入
Themer.applyTheme(button)
最后你也不需要inout
注释
class Themer {
class func applyTheme(_ object: AnyObject) {
//do theming
}
}
class ViewController: UIViewController {
@IBOutlet weak var button: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
Themer.applyTheme(self.button)
}
}
但是…
但是,您的applyTheme
方法应该做什么?它接收到AnyObject
,然后呢?您可以使它更具体一些,并使用UIView
作为参数
class Themer {
class func applyTheme(view: UIView) {
//do theming
}
}
class ViewController: UIViewController {
@IBOutlet weak var button: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
Themer.applyTheme(view: button)
}
}
现在您有机会在Themer.applyTheme
中编写有意义的代码。
inout用于想要更改引用的情况,即用另一个对象替换一个对象。这对于IBOutlet来说是非常非常糟糕的事情。这个按钮在视图中使用,连接到很多东西,如果你改变这个变量,一切都会崩溃。
除此之外,请收听appzYourLife。