【发布时间】:2021-03-28 17:31:54
【问题描述】:
我正在尝试关注tutorial 以将 WatchConnectivity 与 SwiftUI 一起使用。在手表的视图模型中,我能够成功接收从 iPhone 发送的消息并将其设置在类的发布变量中,但是当我尝试在 ContentView 中使用该值时,我只看到初始值而不是更新后的值。
ViewModelWatch
import Foundation
import WatchConnectivity
class ViewModelWatch : NSObject, WCSessionDelegate, ObservableObject{
var session: WCSession
@Published var sessionId = ""
init(session: WCSession = .default){
self.session = session
super.init()
self.session.delegate = self
session.activate()
}
func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) {
}
func session(_ session: WCSession, didReceiveMessage message: [String : Any]) {
DispatchQueue.main.async {
if let sessionId = message["sessionId"] {
self.sessionId = sessionId as! String
}
}
}
}
内容视图
import SwiftUI
struct ContentView: View {
@ObservedObject var model = ViewModelWatch()
var body: some View {
Button(action: startAction, label: {
Text("Test")
})
}
func startAction() {
print("sessionId", self.model.sessionId)
}
}
【问题讨论】:
-
View 观察自己的 observable 属性是否依赖于它们,但它不知道(实际上也不知道)任何闭包(包括函数)内部发生了什么
-
@Asperi - 那么你建议如何获取更新后的 sessionId 值?
标签: ios swift swiftui watchos watchconnectivity