Swift 4.1、Xcode 9.3下如何扩展数组的数组?
扩展Swift中的二维数组
我来帮你搞定这两个关于Swift数组扩展的问题~
一、扩展任意类型的二维数组(解决你第一个代码的错误)
你写extension Array where Element == Array时报错,核心原因是:Swift的Array是泛型类型,必须指定它的元素类型,不能直接写Array不带泛型参数。
要扩展任意的二维数组(不管内部子数组的元素是什么类型),你可以通过约束Element遵循ArrayProtocol(Swift标准库中Array实现的协议),或者更通用的Collection协议(如果想兼容更多集合类序列的话)。
写法示例1:仅针对Array组成的二维数组
extension Array where Element: ArrayProtocol { func someMethod() { // 在这里实现你的方法逻辑 print("这是任意二维数组的通用方法") // 比如遍历所有子数组 for subArray in self { print("子数组内容:\(subArray)") } } }
写法示例2:兼容所有集合类型的子序列
如果你希望这个扩展不仅适用于Array<Array<T>>,还能适配Array<Set<T>>这类集合组成的数组,可以用更宽泛的约束:
extension Array where Element: Collection { func someMethod() { print("这是适用于所有集合组成的数组的方法") // 你的自定义逻辑 } }
二、扩展特定类型的二维数组(比如Array<Array>)
你问的extension Array where Element == Array<Int>是完全可行的!这种写法能精准扩展元素为Array<Int>的数组,也就是二维整数数组。
代码示例:
extension Array where Element == Array<Int> { func someOtherMethod() { // 针对二维整数数组的专属逻辑 let totalSum = self.flatMap { $0 }.reduce(0, +) print("二维数组所有元素的总和:\(totalSum)") } }
使用测试:
let int2DArray = [[1,2], [3,4]] int2DArray.someOtherMethod() // 输出:二维数组所有元素的总和:10 let string2DArray = [["a", "b"], ["c"]] // string2DArray.someOtherMethod() // 此处会报错,因为类型不匹配,符合预期
内容的提问来源于stack exchange,提问作者Noah Wilder
相关产品推荐
相关产品推荐

