iOS App Intent中Measurement类型参数的实现问题求助
解决App Intent中Measurement的Sendable警告与Siri识别问题
针对你遇到的两个问题,分享实际可行的解决方法:
1. 消除UnitLength不遵循Sendable协议的警告
UnitLength在部分Foundation版本中未默认遵循Sendable,可以通过两种方式解决:
- 方式一:扩展显式遵循Sendable
直接给UnitLength添加扩展,让它符合协议:extension UnitLength: Sendable {} - 方式二:使用@unchecked Sendable抑制警告
如果你确认Measurement<UnitLength>的使用是线程安全的,可以在属性上添加标注:@Parameter(title: "Measurement") var measurement: Measurement<UnitLength> @unchecked Sendable
2. 让Siri正确识别测量值请求
Siri无法识别通常是因为意图参数的语义描述不足或配置缺失,可按以下步骤调整:
- 完善参数摘要与描述
在你的LogMileageIntent中补充parameterSummary,明确参数的语义,同时给@Parameter添加详细描述:struct LogMileageIntent: AppIntent, CustomIntentMigratedAppIntent, PredictableIntent { static var title: LocalizedStringResource = "Log Mileage" static var description = IntentDescription("Tracks your driving mileage.") @Parameter(title: "Measurement", description: "The distance driven, like miles or kilometers") var measurement: Measurement<UnitLength> static var parameterSummary: some ParameterSummary { Summary("Log \(\.$measurement) of driving mileage") } // 其他实现代码... } - 使用明确的语音指令测试
测试时使用清晰的指令,比如“Log 3 miles of driving mileage”或“记录6公里的行车里程”,避免模糊表述。 - 确认Intent注册配置
检查Info.plist中是否正确注册了该Intent,确保Siri能检索到你的意图定义。
很多开发者已经成功实现了这个功能,核心就是处理好Sendable的兼容性,同时给Siri足够的语义信息来解析测量值参数。
内容的提问来源于stack exchange,提问作者Will Alexander
相关产品推荐
相关产品推荐

