繁体   English   中英

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

[英]How to declare optional class property with generic `Results`

我有很多Object子类,它们都符合某些协议(例如Transport ),我不知道将显示哪种类型的对象(例如CarBus ),它取决于一些参数,因此我想有一些通用的计算值,它可以根据Type枚举值返回ObjectResults 如果不将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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM