如何实现可自动推断协议兼容类的泛型初始化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
相关产品推荐
相关产品推荐

