泛型不适用于隐式解包的可选
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
}
}
我创建了 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
}
}