我無法回傳使用協議作為依賴項的視圖,因為這會拋出我Reference to generic type 'LoginView' requires arguments in <...>。
func makeLoginView(viewModel: LoginViewModelType) -> LoginView {
return LoginView(viewModel: viewModel)
}
我的 LoginView 使用 LoginViewModelType,因為我有兩個不同的視圖模型。
protocol LoginViewModelType: ObservableObject {
var bookingPaymentViewModel: BookingPaymentViewModel? { get }
var email: String { get set }
var password: String { get set }\
...
func login()
}
struct LoginView<ViewModel: LoginViewModelType>: View {
@ObservedObject var viewModel: ViewModel
var body: some View {
...
}
我不明白我做錯了什么,LoginView 應該能夠回傳一個視圖,不管它是否符合 LoginViewModelType。
uj5u.com熱心網友回復:
您需要限制makeLoginView接受型別的泛型,LoginViewModelType然后在回傳值中使用相同的泛型。
class BookingPaymentViewModel { }
func makeLoginView<T:LoginViewModelType>(viewModel: T) -> LoginView<T> {
return LoginView(viewModel: viewModel)
}
protocol LoginViewModelType: ObservableObject {
var bookingPaymentViewModel: BookingPaymentViewModel? { get }
var email: String { get set }
var password: String { get set }
func login()
}
struct LoginView<ViewModel: LoginViewModelType>: View {
@ObservedObject var viewModel: ViewModel
var body: some View {
Text("test")
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/348888.html
