[英]How to declare optional class property with generic `Results`
我有很多Object
子类,它们都符合某些协议(例如Transport
),我不知道将显示哪种类型的对象(例如Car
或Bus
),它取决于一些参数,因此我想有一些通用的计算值,它可以根据Type
枚举值返回Object
的Results
。 如果不将Results
为数组,我可以这样做吗?
protocol Transport { }
class Car: Object, Transport { }
class Bus: Object, Transport { }
// #1
var array: Array<Transport>? {
return [Car(), Bus()]
}
// #2
var results: Results<Object>? {
if displayCars {
realm?.objects(Car.self)
} else {
realm?.objects(Bus.self)
}
}
№1会很好,但№2将无法编译,因为: Cannot convert return expression of type 'Results<Car>?' to return type 'Results<Object>?'
Cannot convert return expression of type 'Results<Car>?' to return type 'Results<Object>?'
// Another example.
var objects: Results<Object>?
override func viewDidLoad() {
super.viewDidLoad()
if displayCars {
objects = realm.objects(Car.self)
}
}
编译错误: Cannot assign value of type 'Results<Car>?' to type 'Results<Object>?'
Cannot assign value of type 'Results<Car>?' to type 'Results<Object>?'
不幸的是,您可能需要将Results<Car>
转换为[Car]
才能使其正常工作。 内置的Swift集合是协变的 ,但任何用户定义的Swift泛型类型(包括用户定义的集合)都是不变的。 现在没有办法另行说明。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.