这应该可行,但我不知道为什么不这样做。代码不言自明。
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)
}
按钮对象是一个变量,但编译器会抛出错误。
答案 0 :(得分:2)
由于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
内编写有意义的代码。
答案 1 :(得分:1)
inout用于您想要更改引用的情况,即将一个对象替换为另一个对象。这对IBOutlet来说非常非常非常糟糕。该按钮用于一个视图,连接到很多东西,如果你改变变量,所有地狱都会失败。
除此之外,请听appzYourLife。