有了「汇率转换工具」基本功能,我们还需要能自定义参数,配置任意两种货币之间的转换。
这里就需要 widgets 用户配置了。
widget 用户配置界面不需要手动编写,只要添加一个 SiriIntent 即可,用户只需要长按小部件后点击编辑即可配置 Widget 的数据了。
配置界面大致如下:
汇率兑换,肯定需要选择兑换的两种货币,这里就需要两个参数 from 和 to。同时,我们需要定义一个枚举 Enum,罗列常见的货币种类名称。
New Enum
创建 Enum,我选择其中几种常规的货币:
[‘CNY’, ‘USD’, ‘GBP’, ‘EUR’, ‘CAD’, ‘HKD’, ‘MOP’, ‘THB’, ‘SGD’]
intent 参数
如上所说的,增加两个参数 from 和 to 从 Enum 中选择需要兑换的货币名称。
默认值为:人民币
参数 to 也相似。
定义好参数后,我们可以运行看看效果,在长按小组件后,选择编辑,即出现 from 和 to 的选项。
使用参数
有了参数,接下来就是如何使用了。
首先在我们的 ExchangeProvider 写一个参数转换函数,将参数类型转化为 String 类型,再传入 Exchange API。
1 | func exchange(for config: ExchangeIntent, type: Bool) -> String { |
在 getTimeline
函数中,我们就可以使用转换函数,将 ExchangeIntent 的 from 和 to 参数转为 String 引入 ExchangeLoader.fetch(from, to)
中:
1 | ExchangeLoader.fetch(from: exchange(for: configuration, type: true), to: exchange(for: configuration, type: false)) { result in |
我们再次运行看看效果 (默认的 from 为人民币,to 为美元):
总结
到此,我们基本完成了一个 iOS 14 小组件的开发:
- 通过 Exchange API 获取网络数据;
- 利用 ExchangeView 编写 SwiftUI 显示效果;
- 利用 SiriIntent 配置小组件参数和枚举类型,作为用户数据输入的交互入口;
- 利用 getTimeline 实时将用户传入参数去请求接口获取最新货币兑换数据。
- 「todo」:Timeline 的用法。