我正在尝试生成符合协议Protocoling
的ViewModel,该协议是泛型的,并具有相关类型。
有几个ViewModel符合该协议,因此我正在尝试为ViewModel创建工厂。
Swift出现了以下错误:
由于具有Self或相关类型要求,因此协议只能用作泛型约束
示例代码:
protocol Protocoling {
associatedtype modulingType
var data: modulingType { get }
}
enum MyTypes {
case myName
case myAddress
}
class NameViewModel: Protocoling {
let data: String
init(name: String) {
data = name
}
}
class AddressViewModel: Protocoling {
let data: [String]
init(address: [String]) {
data = address
}
}
class DataFactory {
func viewModel(forType type: MyTypes) -> Protocoling {
switch type {
case .name: return NameViewModel(name: "Gil")
case .address: return AddressViewModel(address: ["Israel", "Tel Aviv"])
}
}
}
错误在于 func viewModel(forType type: MyTypes) -> Protocoling
。
有没有办法解决这个问题?