小编gra*_*ley的帖子

在swift中处理UIView常见初始化

像UIView这样的特殊类有多个指定的初始化程序.

在Objective-X中,我们可以将常见初始化分解为单独的函数

- (id)initWithCoder:(NSCoder *)aDecoder {
    if (self = [super initWithCoder:aDecoder]) {
        [self initialize];
    }

    return self;
}

- (id)initWithFrame:(CGRect)frame {
    if (self = [super initWithFrame:frame]) {
        [self initialize];
    }
    return self;
}
Run Code Online (Sandbox Code Playgroud)

在Swift中,这不再是一种可能性,因为以下代码会导致"在super.init调用之前自行使用"

override init(frame: CGRect) {
    self.initialize()
    super.init(frame: frame)
}

required init(coder aDecoder: NSCoder) {
    self.initialize()
    super.init(coder: aDecoder)
}
Run Code Online (Sandbox Code Playgroud)

在super.init之后放置self.initialize也没有帮助,因为我的整个目的是初始化成员.以下将导致'属性self.X未在super.init调用时初始化'

var X : Int

override init(frame: CGRect) {
    super.init(frame: frame)
    self.initialize()
}

required init(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    self.initialize()
}
Run Code Online (Sandbox Code Playgroud)

如果我想在这种情况下考虑常见的初始化,我该怎么办?请注意,我特别不想使用awakeFromNib,因为我希望我的对象在我的对象层次结构中的任何相关awakeFromNib实现中可用.另请注意,选项对我的用例没有意义.

initialization ios swift

6
推荐指数
1
解决办法
928
查看次数

标签 统计

initialization ×1

ios ×1

swift ×1