版本記錄
版本號(hào) | 時(shí)間 |
---|---|
V1.0 | 2018.09.11 |
前言
大家都知道隨著人工智能的發(fā)展,會(huì)掀起來(lái)另外一個(gè)工業(yè)革命舔清,而語(yǔ)音識(shí)別就是人工智能的初始階段觅彰,但是每個(gè)公司做的都不一樣,涉及到一系列的語(yǔ)音的采集和算法實(shí)現(xiàn)替裆,蘋果的Siri就是業(yè)界語(yǔ)音識(shí)別的代表性的產(chǎn)品校辩。接下來(lái)的幾篇我們就詳細(xì)解析一下SiriKit這個(gè)框架。感興趣的可以看下面幾篇文章辆童。
1. SiriKit框架詳細(xì)解析(一)—— 基本概覽(一)
2. SiriKit框架詳細(xì)解析(二)—— 請(qǐng)求授權(quán)使用SiriKit和INPreferences類(一)
3. SiriKit框架詳細(xì)解析(三)—— 創(chuàng)建Intents App擴(kuò)展(一)
Structuring Your Code to Support App Extensions - 構(gòu)建代碼以支持App擴(kuò)展
將您的后端服務(wù)移至私有框架宜咒,以便您的應(yīng)用和應(yīng)用擴(kuò)展程序可以使用它們。
應(yīng)用擴(kuò)展程序是代表您的應(yīng)用把鉴,vending
服務(wù)或在系統(tǒng)詢問(wèn)時(shí)向系統(tǒng)提供信息的代理故黑。 由于它們會(huì)擴(kuò)展您應(yīng)用的行為,因此應(yīng)用擴(kuò)展程序通常需要訪問(wèn)您的應(yīng)用使用的相同后端服務(wù)和數(shù)據(jù)纸镊。
如果您的應(yīng)用和應(yīng)用擴(kuò)展程序共享服務(wù)倍阐,請(qǐng)考慮按以下方式構(gòu)建代碼:
Implement your core services in a private shared framework - 在私有共享框架中實(shí)現(xiàn)您的核心服務(wù)。 私有共享框架允許您在一個(gè)代碼模塊中放置用于訪問(wèn)服務(wù)的代碼逗威,并使用來(lái)自多個(gè)目標(biāo)的代碼峰搪。 共享框架通過(guò)確保每個(gè)可執(zhí)行文件使用相同的代碼路徑來(lái)最小化兩個(gè)可執(zhí)行文件的大小并使測(cè)試更容易。
Use a shared container to store common resources - 使用共享容器來(lái)存儲(chǔ)公共資源凯旭。 將相關(guān)圖像和數(shù)據(jù)文件放入共享容器中概耻,以便您的應(yīng)用和應(yīng)用擴(kuò)展程序可以訪問(wèn)它們。 您可以在每個(gè)目標(biāo)的
Capabilities
選項(xiàng)卡中啟用共享容器支持罐呼。
Dispatching Intents to Handler Objects - 將意圖調(diào)度到處理對(duì)象
為SiriKit提供一個(gè)能夠處理給定意圖的對(duì)象鞠柄。
當(dāng)用戶使用Siri
或Maps
向您的應(yīng)用發(fā)出請(qǐng)求時(shí),SiriKit
會(huì)加載您的Intents
應(yīng)用擴(kuò)展并創(chuàng)建其INExtension子類的實(shí)例嫉柴。 擴(kuò)展對(duì)象的工作是為SiriKit
提供用于處理特定意圖的處理程序?qū)ο蟆?您可以從擴(kuò)展對(duì)象的handler(for:)方法中提供這些對(duì)象厌杜。
對(duì)于所有Intents
應(yīng)用程序擴(kuò)展,handler(for:)方法的結(jié)構(gòu)是相同的,并且該方法必須為Intents應(yīng)用程序擴(kuò)展支持的所有意圖返回有效的新對(duì)象夯尽。 Listing 1
顯示了支持消息和VoIP呼叫域中的意圖的方法版本瞧壮。 在檢查提供的intent對(duì)象的類型之后,該方法創(chuàng)建并返回能夠處理該intent的對(duì)象匙握。
// Listing 1
Providing handler objects to SiriKit
override func handler(for intent: INIntent) -> Any {
switch intent {
case is INSendMessageIntent,
is INSearchForMessagesIntent,
is INSetMessageAttributeIntent:
return MyMessageHandler()
case is INStartAudioCallIntent:
return MyAudioCallHandler()
case is INStartVideoCallIntent:
return MyVideoCallHandler()
default:
// The app extension should only be called for intents it knows about.
fatalError()
}
}
從處理程序返回的對(duì)象handler(for:)方法必須實(shí)現(xiàn)處理相應(yīng)意圖所需的特定協(xié)議咆槽。 每個(gè)intent對(duì)象都有一個(gè)關(guān)聯(lián)的協(xié)議,其名稱基于intent的名稱圈纺。 例如秦忿,在處理INStartAudioCallIntent對(duì)象時(shí),您提供了一個(gè)采用INStartAudioCallIntentHandling協(xié)議的對(duì)象蛾娶。 該協(xié)議定義了您的對(duì)象必須實(shí)現(xiàn)的方法來(lái)解析任何意圖參數(shù)灯谣,并讓SiriKit知道您如何處理意圖。
SiriKit通常在處理單個(gè)intent對(duì)象時(shí)創(chuàng)建處理程序?qū)ο蟮亩鄠€(gè)副本茫叭,并且在每個(gè)對(duì)象上只調(diào)用一個(gè)方法酬屉。 不要將緩存的狀態(tài)信息存儲(chǔ)在處理程序?qū)ο笾校驗(yàn)樵诤罄m(xù)方法調(diào)用期間不會(huì)出現(xiàn)該信息揍愁。 相反呐萨,應(yīng)該始終對(duì)每個(gè)方法中的任何所需數(shù)據(jù)發(fā)出新的請(qǐng)求。
后記
本篇主要講述了構(gòu)建代碼以支持App擴(kuò)展和將意圖調(diào)度到處理對(duì)象莽囤,感興趣的給個(gè)贊或者關(guān)注~~~