如何使用泛型`Results`声明可选的类属性

时间:2017-03-26 21:54:46

标签: ios swift realm

我有很多$_SESSION个子类,它们都符合某些协议(例如Object)并且我不知道哪种类型的对象(Transport或将显示Car为ex。),它取决于一些参数,因此我希望有一些通用计算值,可以根据{{1}返回Bus ResultsObject枚举值。我可以不将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) } }

1 个答案:

答案 0 :(得分:0)

不幸的是,您可能需要将Results<Car>变为[Car]才能使其生效。内置的Swift集合是covariant,但任何用户定义的Swift泛型类型(包括用户定义的集合)都是不变的。现在没有办法另行说明。