我正在寻找类似于Objective-C的+(void)initializeclass方法的行为,因为该方法在类初始化时被调用一次,此后不再被调用。
+(void)initialize
一个简单class init () {}的class闭合将非常时尚!而且很显然,当我们在结构闭包中使用“ class vars”而不是“ static vars”时,这一切都将非常匹配!
class init () {}
class
class var
static var
如果您有一个Objective-C类,最简单的方法就是重写+initialize。但是,请确保您的类的 子 类也被覆盖+initialize,否则您的类的 子 类+initialize可能会被多次调用!如果需要,可以使用dispatch_once()(如下所述)防止出现多个呼叫。
+initialize
dispatch_once()
class MyView : UIView { override class func initialize () { // Do stuff } }
如果您有Swift类,那么最好的方法就是dispatch_once()在init()语句内。
init()
private var once = dispatch_once_t() class MyObject { init () { dispatch_once(&once) { // Do stuff } } }
此解决方案与+initialize(第一次给Objective-C类发送消息时称为)不同,因此不是对问题的真正答案。但是,IMO效果很好。