You need to enable JavaScript to run this app. Swift中如何指定部分泛型参数、其余靠编译器自动推断?
优惠活动
大模型
产品
解决方案
定价
更多

Swift中如何指定部分泛型参数、其余靠编译器自动推断?

结论

Swift 目前不支持仅显式指定部分泛型参数:泛型参数列表要么全部由编译器自动推断,要么全部显式声明。你可以通过以下两种常用变通方案实现需求,无需同时显式写出两个泛型参数。

方案1:调整构造器,通过入参传递Flag类型(优先推荐)

将需要手动指定的Flag类型作为构造器的入参传入,编译器可以从该入参自动推断出Flag泛型的实际类型,同时从data入参推断DataType类型,完全不需要手动写泛型尖括号:

struct FlagMapper<Flag, DataType> {
    let data: DataType

    // 新增构造器,第一个参数接收Flag的类型
    init(flagType: Flag.Type, _ data: DataType) {
        self.data = data
    }
}

// 调用方式,不需要写泛型尖括号
let mapper = FlagMapper(flagType: MyFlag.self, data)

方案2:通过静态工厂方法封装构造逻辑

如果你不想修改原有构造器的参数列表,可以通过扩展添加静态工厂方法实现等效效果:

extension FlagMapper {
    static func create<F>(for flagType: F.Type, data: DataType) -> FlagMapper<F, DataType> {
        FlagMapper<F, DataType>(data)
    }
}

// 调用方式
let mapper = FlagMapper.create(for: MyFlag.self, data: data)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.22 01:36:04