我有很多$_SESSION
个子类,它们都符合某些协议(例如Object
)并且我不知道哪种类型的对象(Transport
或将显示Car
为ex。),它取决于一些参数,因此我希望有一些通用计算值,可以根据{{1}返回Bus
Results
个Object
枚举值。我可以不将Type
强制转换为数组吗?
Results
№1会没事,但№2不会编译,因为:
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)
}
}
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)
}
}
答案 0 :(得分:0)
不幸的是,您可能需要将Results<Car>
变为[Car]
才能使其生效。内置的Swift集合是covariant,但任何用户定义的Swift泛型类型(包括用户定义的集合)都是不变的。现在没有办法另行说明。