Mit*_*hen 4 ios swift widgetkit
我正在开发一个带有两个动态参数的 WidgetKit 小部件。其中一个参数仅限于第一个参数允许的选项。假设第一个是船长,第二个是船长的船。允许的配置可能是(忽略佳能):
Captains: [Kirk, Picard, Crunch]
Captain: Kirk, Ship: [Enterprise, Galileo]
Captain: Picard, Ship: [Enterprise, Voyager, Cube]
Captain: Crunch, Ship: [Sugar, Berry, Chocula]
Run Code Online (Sandbox Code Playgroud)
我有逻辑工作。例如,如果用户选择 Picard,然后点击“发货”按钮,则只有 Enterprise、Voyager 和 Cube 可用选项。然后,用户可以选择其中一艘飞船(例如 Cube),一切都很好。
然而,当船长更换时,船舶选项不会改变或重置。假设经过上述设置后,用户将队长更改为柯克。飞船仍设置为立方体。用户可以退出小部件的配置,就好像一切都很好,但这是一个无效的配置。
我希望发生的情况:当用户更改船长时,船舶将更改为所选船长的第一个可用船舶选项。如果飞船空白(需要选择),或者用户界面强制提示飞船(受可用选项限制),或者几乎任何其他阻止无效组合的东西,我也很好。
有没有办法根据第一个参数的选择触发对第二个参数的编程更改?
我不想在运行时小部件中显示“无效组合”消息。我想我的备份是在用户做出无效选择的情况下为他们选择一艘船,但这并不理想。
如果重要的话,真正的 Widget 中的第一个参数(上面示例中的 Captain)是真正动态的(通过 API 提供的字符串数组)。第二个参数(上面的 Ship)是一组固定的三个选项,其中任何一个、两个或全部三个都可以应用于第一个参数的任何选择。预计用户可以创建具有不同配置的多个小部件。
paw*_*222 10
不幸的是,这个问题没有好的解决方案。
一种可能的解决方法是为每种船舶类型创建单独的枚举。这意味着您将拥有and ( , , ) 而不是Captainand 。ShipCaptainKirkShipPicardShipCrunchShip
然后您需要通过parent parameter在该Relationship部分中定义来有条件地显示它们。
这将允许您在 UI 上仅显示相关参数:
这是意图配置:
上述方法的问题是您需要手动将意图枚举映射到域模型。这是一个可能的例子:
enum Ship: String {
case enterprise, galileo, voyager, cube // ...
init?(_ ship: KirkShip) {
switch ship {
case .unknown:
return nil
case .enterprise:
self = .enterprise
case .galileo:
self = .galileo
}
}
// more inits...
}
Run Code Online (Sandbox Code Playgroud)
然后根据configuration.captain参数使用相关船舶:
if configuration.captain == .kirk {
let ship = Ship(configuration.kirkShip)
// ...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1283 次 |
| 最近记录: |