Swift“其中”Array Extensions“
从Swift 2.0开始,我们似乎可以更接近适用于预测情况的通用类型的扩展。
虽然我们还是不能这样做: protocol Idable { var id : String { get } } extension Array where T : Idable { ... } …我们现在可以这样做: extension Array { func filterWithId<T where T : Idable>(id : String) -> [T] { ... } } …和Swift语法接受。然而,对于我的生活我无法弄清楚当我填写示例函数的内容时如何使编译器快乐。假设我是尽可能明确的: extension Array { func filterWithId<T where T : Idable>(id : String) -> [T] { return self.filter { (item : T) -> Bool in return item.id == id } } } …编译器不会接受提供的关闭来过滤,抱怨
类似,如果项目被指定为空闲。任何人都有运气吗 extension Array { func filterWithId<T where T : Idable>(id : String) -> [T] { ... } } 定义一个通用方法filterWithId(),其中通用 所以你没有指定数组元素必须符合 从Swift 2 / Xcode 7 beta 2开始,您可以在通用类型上定义扩展方法,对模板更加限制 extension Array where Element : Idable { func filterWithId(id : String) -> [Element] { return self.filter { (item) -> Bool in return item.id == id } } } 或者,您可以定义协议扩展方法: extension SequenceType where Generator.Element : Idable { func filterWithId(id : String) -> [Generator.Element] { return self.filter { (item) -> Bool in return item.id == id } } } 那么filterWithId()可用于所有符合的类型 在Swift 3这将是 extension Sequence where Iterator.Element : Idable { func filterWithId(id : String) -> [Iterator.Element] { return self.filter { (item) -> Bool in return item.id == id } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |