泛型不使用隐式展开的可选项

时间:2015-01-16 17:17:59

标签: ios swift generics

我创建了UIView的扩展,以便能够在一行中创建和添加子视图:

extension UIView {

    func createAndAddSubview<T:UIView>() -> T {
        let view = T()
        self.addSubview(view)
        return view
    }
}

这适用于普通声明:

let myLabel:UILabel = view.createAndAddSubview()
var myImageView:UIImageView = view.createAndAddSubview()

但是使用隐式包装的选项,我得到编译器错误。我认为这是因为可选项会阻止编译器确定正确的类型。

  

'UIView'无法转换为'UILabel'

class MyController {
    var myLabel:UIlabel!

    func foo() {
        myLabel = view.createAndAddSubview()
    }
}

当然,我可以让它像这样工作

let myLabel:UILabel = view.createAndAddSubview()
self.myLabel = myLabel

但这不再是一条线......我怎么能改善呢?

谢谢!

1 个答案:

答案 0 :(得分:1)

我猜编译器无法将类型推断为ImplicitlyUnwrappedOptional。尝试:

self.myLabel = .Some(self.view.createAndAddSubview())

extension UIView {
    func createAndAddSubview<T:UIView>() -> T? {
        let view = T()
        self.addSubview(view)
        return view
    }
}