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

如何实现可自动推断协议兼容类的泛型初始化generate函数?

实现泛型函数初始化遵循指定协议的类实例

需求概述

需要编写一个泛型函数generate(value:),可以根据变量的显式类型推断,自动创建遵循MyProtocol协议的类实例,调用示例如下:

let foo: Foo = generate(value: 1)
let bar: Bar = generate(value: 2)

修正后的基础代码

原代码中的Foo和Bar缺少初始化逻辑,无法直接实例化。我们需要给协议添加初始化器要求,同时让遵循协议的类实现该初始化器:

protocol MyProtocol {
    var value: Int { get set }
    // 添加初始化器要求,确保所有遵循协议的类都具备该初始化逻辑
    init(value: Int)
}

class Foo: MyProtocol {
    var value: Int
    
    // 实现协议要求的初始化器,用required保证子类也能遵循协议要求
    required init(value: Int) {
        self.value = value
    }
}

class Bar: MyProtocol {
    var value: Int
    
    // 实现协议要求的初始化器
    required init(value: Int) {
        self.value = value
    }
}

泛型函数实现

通过泛型约束限定返回类型必须遵循MyProtocol,直接利用协议要求的初始化器创建实例:

func generate<T: MyProtocol>(value: Int) -> T {
    return T(value: value)
}

调用验证

按照需求示例调用,类型推断会自动确定要实例化的类:

let foo: Foo = generate(value: 1)
print(foo.value) // 输出 1

let bar: Bar = generate(value: 2)
print(bar.value) // 输出 2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 06:22:43