你如何ViewModel用不同的用例初始化一個?我的要求是ViewModel用 aMockUseCase和 a APIUseCase(實際行為)測驗我的,但我遇到了一些錯誤。我嘗試了不同的方法,但沒有任何效果。這是我現在遇到的錯誤:

protocol BaseUseCase {
associatedtype _Request
associatedtype _Response
func execute(_ command: _Request, response: @escaping (_Response) -> Void)
}
API用例:
struct APIUseCase : BaseUseCase {
enum Request {
case getPosts
}
enum Response {
case recievedPosts(_ posts: [String])
}
typealias _Request = Request
typealias _Response = Response
func execute(_ command: _Request, response: @escaping (_Response) -> Void) {
switch command {
case .getPosts:
response(.recievedPosts(["Post Returning from API"]))
}
}
}
模擬用例:
struct MockUseCase : BaseUseCase {
enum Request {
case getPosts
}
enum Response {
case recievedPosts(_ posts: [String])
}
typealias _Request = Request
typealias _Response = Response
func execute(_ command: _Request, response: @escaping (_Response) -> Void) {
switch command {
case .getPosts:
response(.recievedPosts(["Post Returning from Mock"]))
}
}
}
視圖模型:
class ViewModel {
var usecase: any BaseUseCase
init(usecase: some BaseUseCase = APIUseCase()) {
self.usecase = usecase
}
func execute() {
usecase.execute(.getPosts) { response in }
}
}
uj5u.com熱心網友回復:
您不能注入具有關聯型別的協議,除非您使用泛型型別創建您的類:
i.e: ViewModel<T: BaseUseCase> {}
您以這種方式定義請求和回應有什么原因嗎?因為它們是相同的,所以我認為沒有任何理由這樣做。
enum Request {
case getPosts
}
enum Response {
case recievedPosts(_ posts: [String])
}
protocol BaseUseCase {
func execute(_ command: Request, response: @escaping (Response) -> Void)
}
struct APIUseCase : BaseUseCase {
func execute(_ command: Request, response: @escaping (Response) -> Void) {
switch command {
case .getPosts:
response(.recievedPosts(["Post Returning from API"]))
}
}
}
struct MockUseCase : BaseUseCase {
func execute(_ command: Request, response: @escaping (Response) -> Void) {
switch command {
case .getPosts:
response(.recievedPosts(["Post Returning from Mock"]))
}
}
}
class ViewModel {
var usecase: BaseUseCase
init(usecase: BaseUseCase) {
self.usecase = usecase
}
func execute() {
usecase.execute(.getPosts) { response in }
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/526424.html
標籤:IOS迅速
