您好我正在尝试创建一个接受符合特定协议的泛型类型的函数,并且此协议有一个静态构建器,它返回同一个类的新实例(使用关联类型),之后他返回创建的新对象。
泛型函数将返回泛型类型的列表。
在我努力编译的过程中,我找到了一个解决方案,但我觉得自己被骗了,请看下面的代码:
import UIKit
protocol SomeRougeProtocol {
associatedtype U
static func convert(id: String) -> U
}
class FirstRougeClass: SomeRougeProtocol {
typealias U = FirstRougeClass
let value: String
init(value: String = "") {
self.value = value
}
static func convert(id: String) -> FirstRougeClass {
return FirstRougeClass(value: id)
}
}
class SecondRougeClass: SomeRougeProtocol {
typealias U = SecondRougeClass
let value: String
init(value: String = "") {
self.value = "special \(value)"
}
static func convert(id: String) -> SecondRougeClass {
return SecondRougeClass()
}
}
/// Takes type and generate an array from it.
func superConvert<T: SomeRougeProtocol>(class: T) -> [T.U] {
return [T.convert(id: "1"), T.convert(id: "2"), T.convert(id: "3")]
}
// *** This is the cheasty part, I have to create a disposable object to pass as input, it won't compile otherwise.
let disposableObject = FirstRougeClass()
let a: [FirstRougeClass] = superConvert(class: disposableObject)
a[0].value // Generates "1" in the playground, success!
我的问题是,如果有更好的方法来实现我的目标吗?不使用一次性物品将是一个很大的优点哈哈
谢谢!