You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 20:33:21