Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift apple watch和iPhone之间的通信速度非常慢_Swift - Fatal编程技术网

Swift apple watch和iPhone之间的通信速度非常慢

Swift apple watch和iPhone之间的通信速度非常慢,swift,Swift,我编写了一个非常基本的Xcode项目,其中包含3个目标: -iOS目标 -WatchKit应用程序 -手表套件分机 首先,我不明白为什么Xcode会为WatchKit应用程序创建第二个目标(扩展)?似乎WatchKit应用程序包含故事板,WatchKit扩展包含swift代码(控制器)。Xcode设计和拆分两个目标而不是一个目标有什么特别的原因吗 请看这段非常基本的代码: iOS控制器: override func viewDidLoad() { super.viewDidLoad()

我编写了一个非常基本的Xcode项目,其中包含3个目标: -iOS目标 -WatchKit应用程序 -手表套件分机

首先,我不明白为什么Xcode会为WatchKit应用程序创建第二个目标(扩展)?似乎WatchKit应用程序包含故事板,WatchKit扩展包含swift代码(控制器)。Xcode设计和拆分两个目标而不是一个目标有什么特别的原因吗

请看这段非常基本的代码:

iOS控制器:

override func viewDidLoad()
{
    super.viewDidLoad()

    if WCSession.isSupported()
    {
        let session = WCSession.default()
        session.delegate = self
        session.activate()
    }
}

@IBAction func on_btn_tap(_ sender: Any)
{
    if WCSession.isSupported()
    {
        let session = WCSession.default()
        session.sendMessage(["mykey": "myvalue"], replyHandler: { (response) -> Void in

            NSLog("OK")

        }, errorHandler: { (error) -> Void in
            NSLog("Error)
        })
    }
}
值班分机(InterfaceController.swift):

你当然明白,我的iOS应用程序上有一个按钮。当我点击此按钮时,我会向Watch应用程序发送一条消息,此应用程序将更改按钮颜色

在iPhone上点击按钮和颜色改变之间有大约5-6秒的延迟。你知道为什么吗? 在通信的另一端(观察iPhone),情况最糟糕(10-15秒)


谢谢

因为您正在更新UI,所以需要将其包装在DispatchQueue中,如下所示:

DispatchQueue.main.async {
    self.btn.setBackgroundColor(UIColor.yellow)
}
这些委托回调不在主线程上,您不应该从主线程以外的任何其他线程更新UI。这样包装可以更快地更新UI和更安全的代码

DispatchQueue.main.async {
    self.btn.setBackgroundColor(UIColor.yellow)
}