我坚持斯威夫特语法。这个代码示例不会编译,我也找不到原因。上面写着
类型'TextMessageViewModelDefaultBuilder‘不符合协议'ViewModelBuilderProtocol’
import Foundation
protocol MessageModelProtocol { }
protocol MessageViewModelProtocol { }
protocol TextMessageViewModelProtocol:MessageViewModelProtocol {}
protocol TextMessageModelProtocol:MessageModelProtocol {}
protocol ViewModelBuilderProtocol {
associatedtype ModelT: MessageModelProtocol
associatedtype ViewModelT: MessageViewModelProtocol
func canCreateViewModel(fromModel model: Any) -> Bool
func createViewModel(_ model: ModelT) -> ViewModelT
}
class TextMessageViewModelDefaultBuilder: ViewModelBuilderProtocol {
typealias ModelT = TextMessageModelProtocol
typealias ViewModelT = TextMessageViewModelProtocol
init() {}
func createViewModel(_ textMessage: ModelT) -> ViewModelT {
return ViewModelT()
}
func canCreateViewModel(fromModel model: Any) -> Bool {
return model is ModelT
}
}发布于 2018-05-29 11:27:01
Hamish在评论中指出,在Swift协议中,协议不符合自己的要求。因此,我不能使用协议类型来实现关联类型的需求。
https://stackoverflow.com/questions/50581449
复制相似问题