相关疑难解决方法(0)

扩展Swift数组以按类型过滤元素

如何扩展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 …

arrays generics swift swift-extensions

2
推荐指数
1
解决办法
1284
查看次数

标签 统计

arrays ×1

generics ×1

swift ×1

swift-extensions ×1