You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为含泛型元素的Array编写带自定义初始化器的扩展

解决方案

你可以通过Swift的泛型约束+where子句实现需求,核心是让编译器明确数组元素类型Element与输入数组元素类型的关联关系。

正确的扩展写法

extension Array {
    init(_ inputArray: [Input]) where Element == MyGeneric<Input>, Input: Hashable {
        self = inputArray.map { MyGeneric(someVariable: $0) }
    }
}

使用示例

let items: [Int] = [1, 2, 3, 4, 5]
// 类型推断生效,直接调用初始化器
let mapped: [MyGeneric<Int>] = .init(items)
// 或者更明确的写法
let mapped2 = Array<MyGeneric<Int>>(items)

代码说明

  • 扩展直接作用于Array,通过where子句约束当前数组的Element必须是MyGeneric<Input>,同时要求Input遵循Hashable(匹配MyGeneric的泛型约束)。
  • 初始化器接收[Input]类型的数组,通过map将每个元素转换为MyGeneric<Input>实例,最终赋值给当前数组。
  • 这种写法让编译器能自动推断泛型类型,完全符合你预期的调用方式。

内容的提问来源于stack exchange,提问作者Jakub

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 07:05:23