iOS与WatchOS应用间共享全局变量及同步计数的简便方法
简便实现iOS与WatchOS计数值同步方案
iOS端代码修改
在现有计数按钮的逻辑中,增加通过WatchConnectivity同步计数值的代码,利用你已配置好的WCSession发送最新计数:
Button(action: { GolfCount += 1 // 同步计数值到手表 if model.session.isReachable { model.session.sendMessage(["golfCount": GolfCount], replyHandler: nil) { error in print(error.localizedDescription) } } }) { Text("Schläge") Text(String(GolfCount)) }
WatchOS端接收与UI更新
在手表端的主视图中,配置WCSession监听iOS端发送的消息,更新本地计数状态:
import SwiftUI import WatchConnectivity struct ContentView: View { @State private var golfCount = 0 private let session: WCSession? init() { if WCSession.isSupported() { session = WCSession.default session?.delegate = self session?.activate() } else { session = nil } } var body: some View { VStack { Text("当前击球数:\(golfCount)") } } } extension ContentView: WCSessionDelegate { func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) {} func session(_ session: WCSession, didReceiveMessage message: [String : Any]) { if let count = message["golfCount"] as? Int { DispatchQueue.main.async { golfCount = count } } } func sessionDidBecomeInactive(_ session: WCSession) {} func sessionDidDeactivate(_ session: WCSession) {} }
关键说明
- 依赖你已实现的iOS端
WCSession配置(因消息发送功能正常,这部分无需额外改动) - 仅在手表处于可达状态时同步计数,避免无效发送
- 手表端收到消息后必须在主线程更新UI,保证界面实时刷新
内容的提问来源于stack exchange,提问作者treenera
相关产品推荐
相关产品推荐

