在Swift中为Array编写扩展时,Element关键字的具体含义是什么?
在Swift中为Array编写扩展时,Element代表什么含义?
Element 是 Swift 数组类型内置的关联类型,专门用来指代当前数组所存储的元素的具体类型。
详细说明
- Array 本身是泛型集合类型,当你声明一个具体的数组实例时,比如
let nums: [Int]、let names: [String],编译器会自动将对应数组的 Element 绑定为你声明的元素类型:前者的 Element 是 Int,后者的 Element 是 String。 - 给 Array 写扩展时,你不需要额外声明泛型参数,直接使用系统预定义的 Element 就能拿到当前数组的元素类型,既简化写法也能保证类型安全。
对应代码示例解释
你给出的自定义 reduce 方法代码如下:
extension Array { func reduce<T>(_ initial: T, combine: (T, Element) -> T) -> T { var result = initial for x in self { result = combine(result, x) } return result } }
代码里 combine: (T, Element) -> T 这个参数的含义是:combine 闭包需要接收两个参数,第一个是泛型 T 类型(和初始值的类型一致),第二个就是当前数组的元素类型。
举个实际调用的例子就更清楚:如果你用 [1,2,3,4] 这个 Int 类型的数组调用这个方法,此时 Element 就是 Int 类型,combine 闭包的第二个参数就必须是 Int,传其他类型编译器会直接报错。
内容的提问来源于stack exchange,提问作者Nighthawk
相关产品推荐
相关产品推荐

