You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shortcuts编辑器不识别布尔类型EntityQueryProperty的解决问询

解决AppIntents布尔属性查询的Shortcuts识别问题

问题场景

实现了遵循AppEntity、Identifiable协议的AlbumAppEntity,其中包含Bool类型的isHidden属性,希望通过EntityPropertyQuery对该属性进行查询。但配置后Shortcuts编辑器未将其识别为布尔参数,而是当作数字字段,运行时抛出AppIntents.EntityPropertyQueryError error 2错误,尝试多种NSPredicate写法均无法解决。

实体定义

struct AlbumAppEntity: AppEntity, Identifiable {
    @Property(title: "Hidden")
    var isHidden: Bool

    // 其他属性
}

原查询配置

static var properties = QueryProperties {
    Property(\AlbumAppEntity.$isHidden) {
        EqualToComparator { isHidden in
            if isHidden {
                return NSPredicate(format: "isHidden == YES")
            } else {
                return NSCompoundPredicate(type: .or, subpredicates: [NSPredicate(format: "isHidden = nil"), NSPredicate(format: "isHidden == NO")])
            }
        }
    }
}

解决方案

核心问题是未显式指定EqualToComparator的泛型类型,导致AppIntents无法正确推断参数为布尔类型,从而让Shortcuts编辑器错误识别为数字字段。只需在EqualToComparator后添加<Bool>泛型声明,同时确保NSPredicate写法正确即可。

修正后的查询配置

static var properties = QueryProperties {
    Property(\AlbumAppEntity.$isHidden) {
        // 显式指定泛型类型为Bool
        EqualToComparator<Bool> { targetIsHidden in
            if targetIsHidden {
                return NSPredicate(format: "isHidden == YES")
            } else {
                // 若业务场景中isHidden不可能为nil,可简化为NSPredicate(format: "isHidden == NO")
                return NSCompoundPredicate(orPredicateWithSubpredicates: [
                    NSPredicate(format: "isHidden == NO"),
                    NSPredicate(format: "isHidden == nil")
                ])
            }
        }
    }
    // 可选:给Shortcuts编辑器设置更友好的显示名称
    .displayName("是否隐藏")
}

关键说明

  1. 显式泛型声明:EqualToComparator<Bool>明确告知AppIntents该查询参数的类型为布尔值,Shortcuts编辑器会自动渲染对应的布尔选择控件(开关/选项)。
  2. Predicate简化:如果你的数据模型中isHidden不可能为nil,可以直接使用NSPredicate(format: "isHidden == %@", NSNumber(value: targetIsHidden))来简化逻辑,无需处理nil分支。
  3. 错误原因:原代码中未指定泛型类型,AppIntents默认按数字类型处理参数,导致运行时出现类型不匹配的error 2,显式声明类型后即可解决该问题。

内容的提问来源于stack exchange,提问作者Marcos Tanaka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 18:48:41