如何扩展swift数组以访问特定类型的成员?
如果数组包含从同一个超类继承的多个类的实例,则这是相关的.理想情况下,它会适当地强制执行类型检查.
使用该filter(_:)方法工作正常,但确实强制类型安全.例如:
protocol MyProtocol { }
struct TypeA: MyProtocol { }
struct TypeB: MyProtocol { }
let myStructs:[MyProtocol] = [ TypeA(), TypeA(), TypeB() ]
let filteredArray = myStructs.filter({ $0 is TypeA })
Run Code Online (Sandbox Code Playgroud)
在filteredArray包含了正确的价值观,但类型仍然[MyProtocol]没有[TypeA].我希望更换最后一个let filteredArray = myStructs.filter({ $0 is TypeA }) as! [TypeA]可以解决这个问题,但项目失败了EXEC_BAD_INSTRUCTION,我不理解.也许类型转换阵列是不可能的?
理想情况下,此行为可以包含在数组扩展中.以下内容无法编译:
extension Array {
func objectsOfType<T:Element>(type:T.Type) -> [T] {
return filter { $0 is T } as! [T]
}
}
Run Code Online (Sandbox Code Playgroud)
这里似乎至少有两个问题:类型约束T:Element似乎不起作用.我不确定基于泛型类型添加约束的正确方法是什么.我的意图是说T …