【发布时间】:2020-01-21 20:55:49
【问题描述】:
鉴于此代码...
class Vehicle{}
class Car : Vehicle {}
class Honda : Car {}
你会如何写下面的函数'findFirst'...
class TypeManager {
var managedTypes:[Any.Type]?
func findFirst(_ type:Any.Type) -> Any.Type? {
return managedTypes.first{ t in t is type.Type } // <-- Doesn't like 'type'
}
}
var typeManager = TypeManager()
typeManager.managedTypes = [
String.self,
Int.self,
Honda.self
]
let firstCarType = typeManager.findFirst(Car.Type)
注意:这实际上是对字典进行反向键查找。在一个完美的解决方案中,我首先尝试在“类型”上找到一个完全匹配的,如果没有找到,就选择一个“类型”的子类。我只是简化了(伪造的)代码以专注于匹配部分。
【问题讨论】:
-
你能举一个例子吗?
-
我正在搜索类型列表(不是实例),以寻找任何符合直接匹配要求或给定类型的子类的要求。这在 C# 中使用
CanAssignFrom是微不足道的。 -
first(where: { $0 is Foo.Type })呢? -
我以为
is只检查实例。 -
类也是(元类型的)实例。