多个Intent无法在Shortcuts中运行,求排查IntentHandler代码问题
问题分析与解决方法
你的问题出在第三个代码的逻辑矛盾上:一个Intent对象不可能同时是AccessTokenIntent和CarIDIntent两种类型。
当触发AccessTokenIntent时,第一个guard通过,但第二个guard会判断“这个Intent是不是CarIDIntent”,结果为否,直接返回.none,导致无法处理;同理触发CarIDIntent时,第一个guard就会返回.none。
正确写法示例
如果两个Intent都需要用AccessTokenIntentHandler处理,应该用逻辑或判断:
class IntentHandler: INExtension { override func handler(for intent: INIntent) -> Any? { guard intent is AccessTokenIntent || intent is CarIDIntent else { return .none } return AccessTokenIntentHandler() } }
如果两个Intent需要不同的处理逻辑,建议用switch分支更清晰:
class IntentHandler: INExtension { override func handler(for intent: INIntent) -> Any? { switch intent { case is AccessTokenIntent: return AccessTokenIntentHandler() case is CarIDIntent: return CarIDIntentHandler() // 替换成对应CarIDIntent的处理类 default: return .none } } }
内容的提问来源于stack exchange,提问作者Sandra Passani
相关产品推荐
相关产品推荐

