泛型不适用于隐式解包的可选

Generics not working with implicitly unwrapped optional

我创建了 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' is not convertible to 'UILabel'

class MyController {
    var myLabel:UIlabel!

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

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

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

但这不再是一行...我该如何改进它?

谢谢!

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

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

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