这是在ObjectiveC中编写的UIView
扩展,可以轻松创建使用自动布局的视图:
+(id)autolayoutView
{
UIView *view = [self new];
view.translatesAutoresizingMaskIntoConstraints = NO;
return view;
}
它调用[self new]
,因此UIView的任何子类都可以使用此方法。我怎样才能在Swift中实现这个目标?
答案 0 :(得分:5)
好的,这似乎是解决方案。该类型必须具有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
}
}
答案 1 :(得分:1)
受格雷戈里·希格利的启发,我认为解决方案就在这里:
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
}
}
答案 2 :(得分:1)
尽管Carrl和Gregory Higley都有正确的解决方案,包括关于self()需要使用所需init的事实,我想发布一个更一般的例子:
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