Coding01

Coding 点滴

0%

学习 iOS Widgets 开发之 exchange 汇率转换工具之用户配置

有了「汇率转换工具」基本功能,我们还需要能自定义参数,配置任意两种货币之间的转换。

这里就需要 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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
func exchange(for config: ExchangeIntent, type: Bool) -> String {
let value = type ? config.from : config.to
switch value {
case .cNY:
return "CNY"
case .uSD:
return "USD"
case .gBP:
return "GBP"
case .eUR:
return "EUR"
case .cAD:
return "CAD"
case .hKD:
return "HKD"
case .mOP:
return "MOP"
case .tHB:
return "THB"
case .sGD:
return "SGD"
case .unknown:
return "EUR"
}
}

getTimeline 函数中,我们就可以使用转换函数,将 ExchangeIntent 的 from 和 to 参数转为 String 引入 ExchangeLoader.fetch(from, to) 中:

1
2
3
ExchangeLoader.fetch(from: exchange(for: configuration, type: true), to: exchange(for: configuration, type: false)) { result in
...
}

我们再次运行看看效果 (默认的 from 为人民币,to 为美元):

总结

到此,我们基本完成了一个 iOS 14 小组件的开发:

  1. 通过 Exchange API 获取网络数据;
  2. 利用 ExchangeView 编写 SwiftUI 显示效果;
  3. 利用 SiriIntent 配置小组件参数和枚举类型,作为用户数据输入的交互入口;
  4. 利用 getTimeline 实时将用户传入参数去请求接口获取最新货币兑换数据。
  5. 「todo」:Timeline 的用法。

Welcome to my other publishing channels