带SwiftUI的MVVM协调员:与';视图';通用协议
我正在尝试更新我的MVVM协调员模式,以便将其与SwiftUI和Combine一起使用 为了保留抽象性,我使用了一个带SwiftUI的MVVM协调员:与';视图';通用协议,swift,swiftui,Swift,Swiftui,我正在尝试更新我的MVVM协调员模式,以便将其与SwiftUI和Combine一起使用 为了保留抽象性,我使用了一个ScenesFactory,它可以处理我的场景的创建,如下所示: final class ScenesFactory { let viewModelsFactory = SceneViewModelsFactory() } extension ScenesFactory: SomeFlowScenesFactory { func makeSomeScene() -
ScenesFactory
,它可以处理我的场景的创建,如下所示:
final class ScenesFactory {
let viewModelsFactory = SceneViewModelsFactory()
}
extension ScenesFactory: SomeFlowScenesFactory {
func makeSomeScene() -> Scene {
let someSceneInput = SomeSceneInput()
let someSceneViewModel = viewModelsFactory.makeSomeSceneViewModel(with: someSceneInput)
let someSceneView = SomeSceneView()
someSceneView.viewModel = someSceneViewModel
return BaseScene(view: someSceneView, viewModel: someSceneViewModel)
}
}
下面是my场景
协议的实现:
public protocol Scene {
var view: some View { get }
var viewModel: ViewModelOutput { get }
init(view: some View, viewModel: ViewModelOutput)
}
这里的目标是能够使用UIHostingController
呈现我的someScene.view
但编译器在我的场景
协议中抛出错误:
public protocol Scene {
var view: some View { get }
var viewModel: ViewModelOutput { get }
init(view: some View, viewModel: ViewModelOutput)
}
我认为some
关键字的重点正是使用通用协议作为返回类型
我错过了什么
我认为某个关键字的重点正是使用泛型协议作为返回类型
是的,但它似乎在协议
声明中不起作用,不知道为什么
但是有一种方法可以解决这个问题,使用一个associatedtype
,它被约束到视图中,编译器停止抱怨
公共协议场景{
associatedtype内容:视图
var视图:内容{get}
}
结构五:场景{
var视图:一些视图{
EmptyView()
}
}
我认为某个关键字的重点正是使用泛型协议作为返回类型
是的,但它似乎在协议
声明中不起作用,不知道为什么
但是有一种方法可以解决这个问题,使用一个associatedtype
,它被约束到视图中,编译器停止抱怨
公共协议场景{
associatedtype内容:视图
var视图:内容{get}
}
结构五:场景{
var视图:一些视图{
EmptyView()
}
}