如何在 Swift 中调用 [self new]

How to invoke [self new] in Swift

这是一个用 ObjectiveC 编写的 UIView 扩展,可以轻松创建使用自动布局的视图:

+(id)autolayoutView
{
    UIView *view = [self new];
    view.translatesAutoresizingMaskIntoConstraints = NO;
    return view;
}

它调用 [self new] 所以 UIView 的任何子类都可以使用这个方法。我怎样才能在 Swift 中做到这一点?

好的,这似乎是解决方案。该类型必须有一个带有正确参数列表的 required 初始值设定项(在本例中没有参数)。

class SubView: UIView {
    override required init() {
        super.init()
    }

    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
    }

    class func autolayoutView() -> UIView {
        var view = self()
        view.setTranslatesAutoresizingMaskIntoConstraints(false)
        return view
    }
}

受 Gregory Higley 的启发,我认为解决方案就在这里:

extension UIView{
    class func autolayoutView() -> UIView {
        var view = self()
        view.setTranslatesAutoresizingMaskIntoConstraints(false)
        return view
    }
}

Swift2.1 更新:

extension UIView{
    class func autolayoutView() -> UIView {
        let view = self.init()
        view.translatesAutoresizingMaskIntoConstraints = false
        return view
    }
}

尽管 Carrl 和 Gregory Higley 的解决方案都是正确的,包括关于 self() 需要使用必需的初始化这一事实的评论,但我想 post 一个更一般的例子:

class Human {
    var gender = String()
    required init() {
        self.gender = "any"
    }
    class func newHuman() -> Human {
        return self()
    }
}

class Man : Human {
    required init() {
        super.init()
        self.gender = "male"
    }
}

var someMan = Man.newHuman()
println(someMan.gender) // male