使用地图在swift中设置联合发布器
iOS 13,Swift 5.x 我试图在联合订阅/发布服务器上获得正确的语法。我有一个工作的例子,我试图复制它,但我遗漏了一些东西;我看不见树林,也看不见树木。这是我的密码使用地图在swift中设置联合发布器,swift,dictionary,subscription,assign,combine,Swift,Dictionary,Subscription,Assign,Combine,iOS 13,Swift 5.x 我试图在联合订阅/发布服务器上获得正确的语法。我有一个工作的例子,我试图复制它,但我遗漏了一些东西;我看不见树林,也看不见树木。这是我的密码 import Foundation import Combine class SwiftUIViewCModel: ObservableObject { @Published var state : SwiftUIViewCModelState = .page1 static let shared = Swif
import Foundation
import Combine
class SwiftUIViewCModel: ObservableObject {
@Published var state : SwiftUIViewCModelState = .page1
static let shared = SwiftUIViewCModel()
private var stateUpdatingSubscriber: AnyCancellable?
init() {
self.stateUpdatingSubscriber = nil
self.stateUpdatingSubscriber = SwiftUIViewCModel.shared.$state
.map(modelCTomodelD(modelState:))
.receive(on: RunLoop.main)
.assign(to: \.state, on: self)
}
private func modelCTomodelD(modelState: SwiftUIViewCModelState) -> SwiftUIViewEModelState {
switch modelState {
case .page1:
return .page1
case .page2:
return .page2
default:
break
}
}
}
enum SwiftUIViewEModelState {
case page1
case page2
}
enum SwiftUIViewCModelState {
case page1
case page2
}
我在编译时遇到了语法错误,但我不明白我到底需要做什么来修复它
无法将类型为“(SwiftUIViewCModelState)->SwiftUIViewEModelState”的值转换为预期的参数类型“KeyPath”(也称为“KeyPath”)
如何将此处所需的格式转换为此代码
谢谢我不确定这段代码的目的是什么 您得到的错误是,
self.state
的类型为SwiftUIViewCModelState
,但该值已通过map
操作符转换为SwiftUIViewEModelState
。最后一步(.assign(to:\.state,on:self)
)尝试将此新值保存回原始的self.state
变量,但无法保存,因为它现在是另一种类型
我也不知道为什么您希望有一个发布者/订阅者链来修改变量并将其保存回自身
使代码编译的一种方法是添加一个新变量,
var state2:swiftuieviewmodelstate
,然后将.assign
行更改为。assign(to:\.state2,on:self)
。这将创建一个订阅链,该订阅链使用state
var作为发布者,通过map
更改其类型,然后将修改后的值保存到state2。你的解释恰到好处!说得太快,这是汇编;但当我运行它时,它崩溃了。在我声明静态共享对象时崩溃。确定。使其工作,需要更改模型,使其在安装自身之前不会尝试创建子组件。