最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

iPhone與iWatch連接、控制、數(shù)據(jù)傳遞(Swift)的方法

 更新時(shí)間:2017年03月29日 11:44:27   作者:千古嶺  
這篇文章主要介紹了iPhone與iWatch連接、控制、數(shù)據(jù)傳遞(Swift)的方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下

最近在做一個(gè)項(xiàng)目,涉及到iPhone設(shè)備和手表傳輸數(shù)據(jù)、控制彼此界面跳轉(zhuǎn),在網(wǎng)上找了很多資料,發(fā)現(xiàn)國(guó)內(nèi)的網(wǎng)站這方面介紹的不多,而國(guó)外的網(wǎng)站寫(xiě)的也不是很全,所以在這寫(xiě)這篇文章,給大家參考一下,望大神指點(diǎn)一二。

      iPhone和iWatch配對(duì)這個(gè)不需要多說(shuō),百度搜索答案一大堆,這個(gè)是前提。

      iPhone與iWatch交互的代碼有兩種情況,取決于iWatch的系統(tǒng)。iWatch OS1與OS2、3的方法不同,在OS1的系統(tǒng)中,iWatch發(fā)送數(shù)據(jù)的代碼如下

let userInfo:[String:String] = ["key":"value"]
WKInterfaceController.openParentApplication(userInfo) { (replyInfo, error) -> Void in
}

      這個(gè)函數(shù)是發(fā)送消息,同時(shí)也是接收消息,接收到iPhone的回復(fù)是replyInfo。在iPhone端的AppDelegate中,接收消息的代碼:

func application(application: UIApplication, handleWatchKitExtensionRequest userInfo: [NSObject : AnyObject]?, reply: (([NSObject : AnyObject]!) -> Void)!) {
}

      接收到的消息是userInfo,回復(fù)給iWatch的數(shù)據(jù)是reply。

      以上的代碼僅適用于watchOS1,之后的系統(tǒng)就沒(méi)有這個(gè)API了,對(duì)于OS2或OS3,使用的框架是WatchConnectivity,在這里,我將直接提供我寫(xiě)的類(lèi),并給出介紹和使用方法,大家可以直接復(fù)制代碼,在我注釋的地方寫(xiě)自己的功能便可。

以下是iPhone端的代碼:

import UIKit
import WatchConnectivity
class IwatchSessionUtil: NSObject, WCSessionDelegate {
  //靜態(tài)單例
  static let shareManager = IwatchSessionUtil()
  //初始化
  private override init()
  {
    super.init()
  }
  // 連接機(jī)制
  private let session:WCSession? = WCSession.isSupported() ? WCSession.default() : nil
  // 激活機(jī)制對(duì)象
  func startSession(){
    session?.delegate = self
    session?.activate()
  }
  // 檢測(cè)到watch端app
  func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) {
    print("AppleWatch匹配完成")
  }
  // 開(kāi)始向Watch傳遞數(shù)據(jù)
  func sessionDidBecomeInactive(_ session: WCSession) {
  }
  // 數(shù)據(jù)傳遞完了
  func sessionDidDeactivate(_ session: WCSession) {
  }
  // watch側(cè)發(fā)送數(shù)據(jù)過(guò)來(lái),iPhone接收到數(shù)據(jù)并回復(fù)數(shù)據(jù)過(guò)去
  // message: watch側(cè)發(fā)送過(guò)來(lái)的信息
  // replyHandler: iPhone回復(fù)過(guò)去的信息
  func session(_ session: WCSession, didReceiveMessage message: [String : Any], replyHandler: @escaping ([String : Any]) -> Void) {
    // 在這里,我們接收到watch發(fā)送過(guò)來(lái)的數(shù)據(jù),可以用代理、代碼塊或者通知中心傳值到ViewController,做出一系列操作。
    // 注?。。簑atch側(cè)發(fā)送過(guò)來(lái)信息,iPhone回復(fù)直接在這個(gè)函數(shù)里回復(fù)replyHandler([String : Any])(replyHandler(數(shù)據(jù))),這樣watch側(cè)發(fā)送數(shù)據(jù)的函數(shù)對(duì)應(yīng)的reply才能接收到數(shù)據(jù),別跟sendMessage這個(gè)函數(shù)混淆了。如果用sendMessage回復(fù),那watch側(cè)接收到信息就是didReceiveMessage的函數(shù)。
  }
  // iPhone向watch發(fā)送數(shù)據(jù)
  // key: 數(shù)據(jù)的key值
  // value: 數(shù)據(jù)內(nèi)容
  func sendMessageToWatch(key:String,value:Any) {
    session?.sendMessage([key : value], replyHandler: { (dict:Dictionary) in
    // 這里是發(fā)送數(shù)據(jù)后的操作,比如寫(xiě)個(gè)alert提示發(fā)送成功
   // replyHandler是watch側(cè)didReceiveMessage函數(shù)接收到信息后reply回復(fù)過(guò)來(lái)的內(nèi)容,這里可以編輯自己需要的功能
    }, errorHandler: { (Error) in
      // 發(fā)送失敗,一般是藍(lán)牙沒(méi)開(kāi),或手機(jī)開(kāi)了飛行模式
    })
  }
}

調(diào)用方法:

1、首先在iPhone的AppDelegate的didFinishLaunchingWithOptions函數(shù)中添加代碼

IwatchSessionUtil.shareManager.startSession(),確保WCSession能匹配到watch側(cè)的App

              2、發(fā)送消息:調(diào)用方法IwatchSessionUtil.shareManager.sendMessageToWatch(key: , value: )即可,發(fā)送后接收到watch側(cè)的回復(fù)后的操作,直接在類(lèi)sendMessage函數(shù)中編輯就行

              3、watch側(cè)sendMessage發(fā)送信息給iPhone,iPhone側(cè)didReceiveMessage接收到信息,一系列操作上面已經(jīng)注釋寫(xiě)到。

iPhone端的介紹完畢,下面寫(xiě)watch端的代碼,其實(shí)跟iPhone的沒(méi)什么區(qū)別,這里只是為了把這部分內(nèi)容寫(xiě)完全。

import WatchKit
import WatchConnectivity
class WatchSessionUtil: NSObject,WCSessionDelegate {
  // 靜態(tài)單例
  static let sharedManager = WatchSessionUtil()
  // 初始化
  private override init()
  {
    super.init()
  }
  // 連接機(jī)制
  private let session:WCSession? = WCSession.isSupported() ? WCSession.default() : nil
  // 激活機(jī)制
  func startSession(){
    session?.delegate=self
    session?.activate()
  }
  // 檢測(cè)到iPhone的父應(yīng)用
  func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) {
  }
  // 接收到iPhone端發(fā)送過(guò)來(lái)的信息
  // message: iPhone端發(fā)送過(guò)來(lái)的信息
  // replyHandler: watch端回復(fù)給iPhone的內(nèi)容
  func session(_ session: WCSession, didReceiveMessage message: [String : Any], replyHandler: @escaping ([String : Any]) -> Void) {
    // 這里也可以通過(guò)通知中心發(fā)送通知給InterfaceController,進(jìn)行頁(yè)面操作,至于用什么方法大家隨意。注意事項(xiàng)iPhone的代碼里提到了,一樣的性質(zhì),這里就不寫(xiě)了。
  }
  // 向iPhone側(cè)發(fā)送信息
  func sendMessage(key:String, value:Any){
    session?.sendMessage([key : value], replyHandler: { (reply: [String : Any]) in
      // 信息發(fā)送之后,收到iPhone端回復(fù)的操作
    }, errorHandler: { (Error) in
      // 發(fā)送失敗
    })
  }
}

watch的類(lèi)添加在Extension的文件夾中,調(diào)用方法:

1、ExtensionDelegate文件的applicationDidFinishLaunching函數(shù)里寫(xiě)上WatchSessionUtil.sharedManager.startSession()

2、發(fā)送消息:調(diào)用方法IwatchSessionUtil.shareManager.sendMessageToWatch(key: , value: )即可,發(fā)送后接收到iPhone側(cè)的回復(fù)后的操作,直接在類(lèi)sendMessage函數(shù)中編輯就行

3、iPhone側(cè)sendMessage發(fā)送信息給watch,watch側(cè)didReceiveMessage接收到信息,一系列操作上面已經(jīng)注釋寫(xiě)到。

以上所述是小編給大家介紹的iPhone與iWatch連接、控制、數(shù)據(jù)傳遞(Swift)的方法,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • 淺析Swift中struct與class的區(qū)別(匯編角度底層分析)

    淺析Swift中struct與class的區(qū)別(匯編角度底層分析)

    這篇文章主要介紹了Swift中struct與class的區(qū)別 ,本文從匯編角度分析struct與class的區(qū)別,通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03
  • swift 3.0 正則表達(dá)式查找/替換字符的實(shí)現(xiàn)代碼

    swift 3.0 正則表達(dá)式查找/替換字符的實(shí)現(xiàn)代碼

    正則表達(dá)式使用單個(gè)字符串來(lái)描述、匹配一系列符合某個(gè)句法規(guī)則的字符串。本文重點(diǎn)給大家介紹swift 3.0 正則表達(dá)式查找/替換字符的實(shí)現(xiàn)代碼,需要的朋友參考下吧
    2017-08-08
  • 用Swift構(gòu)建一個(gè)簡(jiǎn)單的iOS郵件應(yīng)用的方法

    用Swift構(gòu)建一個(gè)簡(jiǎn)單的iOS郵件應(yīng)用的方法

    這篇文章主要介紹了用Swift構(gòu)建一個(gè)簡(jiǎn)單的iOS郵件應(yīng)用的方法,包括查看和標(biāo)記已讀等基本的郵件應(yīng)用功能,需要的朋友可以參考下
    2015-07-07
  • Swift?reduce函數(shù)使用示例詳解

    Swift?reduce函數(shù)使用示例詳解

    這篇文章主要為大家介紹了Swift?reduce函數(shù)使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • 詳解Swift 結(jié)構(gòu)體

    詳解Swift 結(jié)構(gòu)體

    這篇文章主要介紹了Swift 結(jié)構(gòu)體的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-09-09
  • 為什么switch里的case沒(méi)有break不行

    為什么switch里的case沒(méi)有break不行

    很多朋友糾結(jié)為什么為什么switch里的case沒(méi)有break不行呢?break這么重要么,今天小編就給大家普及下這方便的知識(shí),感興趣的朋友一起看看吧
    2021-06-06
  • 深入講解Swift中的模式匹配

    深入講解Swift中的模式匹配

    在Swift中,一些模式已經(jīng)被語(yǔ)言特性所吸收,你在使用Swift甚至察覺(jué)不出這類(lèi)問(wèn)題的存在,下面這篇文章主要給大家介紹了關(guān)于Swift中模式匹配的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2018-08-08
  • Swift中風(fēng)味各異的類(lèi)型擦除實(shí)例詳解

    Swift中風(fēng)味各異的類(lèi)型擦除實(shí)例詳解

    你也許曾聽(tīng)過(guò)類(lèi)型擦除,甚至也使用過(guò)標(biāo)準(zhǔn)庫(kù)提供的類(lèi)型擦除類(lèi)型如 AnySequence,下面這篇文章主要給大家介紹了關(guān)于Swift中風(fēng)味各異的類(lèi)型擦除的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • Swift教程之類(lèi)的析構(gòu)詳解

    Swift教程之類(lèi)的析構(gòu)詳解

    這篇文章主要介紹了Swift教程之類(lèi)的析構(gòu)詳解,在一個(gè)類(lèi)的實(shí)例被釋放之前,析構(gòu)函數(shù)會(huì)被調(diào)用,本文即講解了析構(gòu)過(guò)程原理、析構(gòu)器操作等內(nèi)容,需要的朋友可以參考下
    2015-01-01
  • swift 錯(cuò)誤處理do catch try try!使用詳解

    swift 錯(cuò)誤處理do catch try try!使用詳解

    這篇文章主要介紹了swift 錯(cuò)誤處理do catch try try!使用詳解的相關(guān)資料,需要的朋友可以參考下
    2023-03-03

最新評(píng)論

厦门市| 家居| 南京市| 大理市| 元朗区| 兴义市| 抚宁县| 崇礼县| 肥城市| 和田县| 嵊泗县| 腾冲县| 德清县| 东阿县| 古田县| 曲松县| 苗栗市| 贡山| 北安市| 青州市| 阳信县| 丹阳市| 开原市| 枣庄市| 苏尼特右旗| 巧家县| 潜山县| 赤峰市| 简阳市| 昌宁县| 霍山县| 托克托县| 彭泽县| 通州市| 平乡县| 大足县| 石首市| 贵德县| 明光市| 龙川县| 古浪县|