作者:Jameson Quave,原文链接,原文日期:2016-06-20
译者:Crystal Sun;校对:numbbbbb;定稿:CMB

这篇教程写于 2016 年 6 月 20 日,使用 Xcode 8 Beta 1 和 Swift 3 开发。

此文章是 SiriKit 教程系列的第二篇,建议先去阅读第一篇。

处理 SiriKit 请求

为了让集成的 Siri 更有用,可以使用 INSendMessageIntentHandling 协议的回调方法增加信息内容。协议有以下可选方法:

resolveRecipients(forSendMessage intent: INSendMessageIntent,with completion: ([INPersonResolutionResult]) -> Swift.Void)
 
resolveContent(forSendMessage intent: INSendMessageIntent,with completion: (INStringResolutionResult) -> Swift.Void)
 
resolveGroupName(forSendMessage intent: INSendMessageIntent,with completion: (INStringResolutionResult) -> Swift.Void)
 
resolveServiceName(forSendMessage intent: INSendMessageIntent,with completion: (INStringResolutionResult) -> Swift.Void)
 
resolveSender(forSendMessage intent: INSendMessageIntent,with completion: (INPersonResolutionResult) -> Swift.Void)

只要实现这些方法,就可以给 SiriKit 提供更多信息,例如接收者(recipients)、内容(content)、小组名字(group name)、服务名字(service name)或者发送者(sender)。

本例的标题内容使用静态数据,主要是为了展示如何使用上面的方法。

首先实现 resolveContent 协议方法。

func resolveContent(forSendMessage intent: INSendMessageIntent,with completion: (INStringResolutionResult) -> Void) {
    let message = "My message body!"
    let response = INStringResolutionResult.success(with: message)
    completion(response)
}

这里我们创建了一个字符串并调用 success 函数。你也可以调用 disambiguationconfirmationrequiredunsupported 。后面会详细说明区别,现在先介绍如何使用 Siri 提供的数据。

Siri 传入的 intent 对象包含文字版的消息内容。我们只对 content 属性感兴趣,把它嵌入字符串中。

func resolveContent(forSendMessage intent: INSendMessageIntent,with completion: (INStringResolutionResult) -> Void) {
    let message = "Dictated text: \(content!)"
    let response = INStringResolutionResult.success(with: message)
 
    completion(response)
}

内容属性是可选值,如此一来,需要确保 Siri 真的提供了文字内容。如果没有文字,那消息就没什么用,这时需要告知 Siri 当前信息缺失,需要提供内容值。可以调用 INStringResolutionResultneedsValue 类方法来请求值。

func resolveContent(forSendMessage intent: INSendMessageIntent,with completion: (INStringResolutionResult) -> Void) {
    if let content = intent.content {
        let message = "Dictated text: \(content)"
        let response = INStringResolutionResult.success(with: message)
        completion(response)
    }
    else {
        let response = INStringResolutionResult.needsValue()
        completion(response)
    }
}

现在当我们尝试发送消息时,SiriKit 就明白必须要提供内容值。接收方也要实现同样的功能。在本例中,接收方可以有多个值,可以使用多种方法从中查询目标值。如果你有一个聊天应用,那可以检查传入的 INPerson 对象,判断应该发送给哪个用户。

不过这些已经超出本教程的范围,留给你自己实现吧。你可以在自己的应用中实现 resolveRecipients 方法。如果需要示例代码,可以查看苹果的示例。

更多 iOS 10 教程

我会继续研究 iOS 10,之后也会继续发布 iOS 10 教程。你可以订阅我们的 newsletter并在 Twitter 上关注我。

本文由 SwiftGG 翻译组翻译,已经获得作者翻译授权,最新文章请访问 http://swift.gg。

详解 SiriKit - SiriKit 教程Part 2的更多相关文章

  1. iOS – 开始iOS教程 – 变量之前的下划线?

    这是正确的还是我做错了什么?

  2. ios – Siri融合付款问​​题

    在我的申请中,我只支持欧元和美元的货币.所以当用户尝试用Siri向GBP发送付款,例如,我请他选择欧元和美元.之后在屏幕上我看到:>100$>100欧元如果我在intent.currencyAmount!.currencyCode中选择100$,我总是有GBP(但是用户选择了美元).这很奇怪这是我的代码:更新:如何复制(根据大卫问题):1)创建一个新的意图实现2)在plist文件中只留下一种类型的

  3. ios – 如何在iPhone应用程序中集成SIRI?

    我正在开发一款iPad应用程序.我想在其中集成SIRI功能.所以,请指导我研究这个问题.其实我不知道如何开始.谢谢,CP解决方法直到现在苹果还没有发布siri的api用于第三方应用程序.如果您正在寻找文本到语音,语音到文本功能.有很多外部api像:>Nuance–Dragon>ispeech>OpenEars还有很多其他的api.OpenEars是一个开源离线api,另外两个是付费和在线的.

  4. Swift开发快速上手系列教程目录-陆续完善,由浅入深

    Swift开发教程一.Swift基础Swift教程01-使用switfc终端命令编译运行swift程序Swift教程02-抓住下一个浪潮之巅Swift教程03-playground剖析swift语言Swift教程04-定义声明变量重要原则Swift教程05-基本数据类型(一)整型浮点型Swift教程06-基本数据类型(二)Bool布尔类型对比Java-boolean,Objc-BOOLSwift教

  5. Swift2.0不深入只浅出入门教程-01-The Basic

    本套视频教程是Swift2.0的入门教程,如果你看过其他的教程,可以不看这套教程,录制这套教程的目的,一个是为了自学,一个是为之后自己的另一套教程打基础。本期教程主要介绍Swift语言的一些基础知识。由于CSDN学院的课程审核还没有通过,所以暂时就放到了百度网盘。

  6. Swift教程-视频拍摄教程

    在此教程中,我们将拍摄一段保存到手机相册的视频。教程运行在iOS8.4和Xcode6.4下。打开Xcode并创建一个newSingleViewApplication,项目名称为IOS8SwiftTakeVideoPlayerTutorial,接着填上你的OrganizationName和OrganizationIdentifier,选择Swift语言,在设备一栏只选择iPhone。ImagePickerController的数据可以是Camera或Movie两种类型。视频的maximum长度设置为10秒。

  7. 我们可以从WWDC 2016中学到什么?

    科技圈的「春晚」——WWDC2016即将于太平洋时间6月13日上午10点正式开始。苹果官方的WWDCApp界面框架简单清晰,操作容易。笔者最早下载WWDC这款应用时,是为了观看WWDC2015的视频,有一天,突然发现自动更新后,它的图标变成了黑色系,和官网海报等的设计如出一辙。WWDC2016日程一览对于开发者而言,从13日-17日,颇为重要的Session有:What’sNewinSwiftSwiftAPIDesignGuidelinesGettingStartedwithSwift包含Swift3的最

  8. 使用 Swift 在 iOS 10 中集成 Siri —— SiriKit 教程Part 1

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  9. 详解 SiriKit - SiriKit 教程Part 2

    此文章是SiriKit教程系列的第二篇,建议先去阅读第一篇。处理SiriKit请求为了让集成的Siri更有用,可以使用INSendMessageIntentHandling协议的回调方法增加信息内容。协议有以下可选方法:只要实现这些方法,就可以给SiriKit提供更多信息,例如接收者、内容、小组名字、服务名字或者发送者。后面会详细说明区别,现在先介绍如何使用Siri提供的数据。Siri传入的intent对象包含文字版的消息内容。现在当我们尝试发送消息时,SiriKit就明白必须要提供内容值。

  10. swift 学习资源 - Swift 语言指南

    对于精选项目及文章,可直接访问《Swift项目精选》和《Swift文章精选》。对于Swift开源及跨平台开发的同学,可以关注swift.org教程文章开源项目推荐网站苹果官方Swift:Swift概述、博客以及开发资源。swift.org:开源后独立出来的Swift开源社区。ksm/SwiftInFlux:作者将AppleDeveloperForums上有关Swift特性、缺陷及变更讨论分类汇总并更新到GitHub,具有很好的可读性。从中可以一窥Swift缺陷及未来潜在地变化。近期第一时间出了三本Swif

随机推荐

  1. Swift UITextField,UITextView,UISegmentedControl,UISwitch

    下面我们通过一个demo来简单的实现下这些控件的功能.首先,我们拖将这几个控件拖到storyboard,并关联上相应的属性和动作.如图:关联上属性和动作后,看看实现的代码:

  2. swift UISlider,UIStepper

    我们用两个label来显示slider和stepper的值.再用张图片来显示改变stepper值的效果.首先,这三个控件需要全局变量声明如下然后,我们对所有的控件做个简单的布局:最后,当slider的值改变时,我们用一个label来显示值的变化,同样,用另一个label来显示stepper值的变化,并改变图片的大小:实现效果如下:

  3. preferredFontForTextStyle字体设置之更改

    即:

  4. Swift没有异常处理,遇到功能性错误怎么办?

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  5. 字典实战和UIKit初探

    ios中数组和字典的应用Applicationschedule类别子项类别名称优先级数据包contactsentertainment接触UIKit学习用Swift调用CocoaTouchimportUIKitletcolors=[]varbackView=UIView(frame:CGRectMake(0.0,0.0,320.0,CGFloat(colors.count*50)))backView

  6. swift语言IOS8开发战记21 Core Data2

    上一话中我们简单地介绍了一些coredata的基本知识,这一话我们通过编程来实现coredata的使用。还记得我们在coredata中定义的那个Model么,上面这段代码会加载这个Model。定义完方法之后,我们对coredata的准备都已经完成了。最后强调一点,coredata并不是数据库,它只是一个框架,协助我们进行数据库操作,它并不关心我们把数据存到哪里。

  7. swift语言IOS8开发战记22 Core Data3

    上一话我们定义了与coredata有关的变量和方法,做足了准备工作,这一话我们来试试能不能成功。首先打开上一话中生成的Info类,在其中引用头文件的地方添加一个@objc,不然后面会报错,我也不知道为什么。

  8. swift实战小程序1天气预报

    在有一定swift基础的情况下,让我们来做一些小程序练练手,今天来试试做一个简单地天气预报。然后在btnpressed方法中依旧增加loadWeather方法.在loadWeather方法中加上信息的显示语句:运行一下看看效果,如图:虽然显示出来了,但是我们的text是可编辑状态的,在storyboard中勾选Editable,再次运行:大功告成,而且现在每次单击按钮,就会重新请求天气情况,大家也来试试吧。

  9. 【iOS学习01】swift ? and !  的学习

    如果不初始化就会报错。

  10. swift语言IOS8开发战记23 Core Data4

    接着我们需要把我们的Rest类变成一个被coredata管理的类,点开Rest类,作如下修改:关键字@NSManaged的作用是与实体中对应的属性通信,BinaryData对应的类型是NSData,CoreData没有布尔属性,只能用0和1来区分。进行如下操作,输入类名:建立好之后因为我们之前写的代码有些地方并不适用于coredata,所以编译器会报错,现在来一一解决。

返回
顶部