提问人:optz 提问时间:7/24/2023 更新时间:7/25/2023 访问量:421
根据 AppIntent 中参数的选择显示 AppEntity 结果
Display AppEntity results depending on the selection of a Parameter in AppIntent
问:
对于即将到来的 iOS 17,我正在从 SiriKit Intents 过渡到 AppIntents,并希望恢复与当前 IntentHandler 相同的逻辑。
根据 AppIntent 上第一个参数的选择,应用会为第二个参数创建选项列表。 例如:在第一个参数上选择一个国家/地区后,我只想在第二个参数上显示位于该国家/地区的城市(而不是所有国家/地区的所有城市)。
我找不到将 country 变量传递给我的 CityEntityQuery 的方法。
可悲的是,更改 AppIntent 的参数是不可能的,因为它无法从 iOS 16 迁移到 iOS 17。
意向的片段:
struct MyIntent: AppIntent, WidgetConfigurationIntent, CustomIntentMigratedAppIntent {
static let intentClassName = "MyIntent"
static var title: LocalizedStringResource = "Do Something"
static var description = IntentDescription("Description of Do Something")
@Parameter(title: "Country")
var country: CountryAppEntity?
@Parameter(title: "City")
var city: CityAppEntity?
}
我的 CityAppEntity ,我想在其中访问在父意向中选择的国家/地区
struct CityAppEntity: AppEntity {
static var typeDisplayRepresentation = TypeDisplayRepresentation(name: "City")
struct CityAppEntityQuery: EntityQuery {
//I'd like to pass the selected country from the intent here somehow
var countryAppEntity: CountryAppEntity?
func entities(for identifiers: [CityAppEntity.ID]) async throws -> [CityAppEntity] {
return await retrieveCities(country: countryAppEntity).filter { identifiers.contains($0.id) }
}
func suggestedEntities() async throws -> [CityAppEntity] {
return await retrieveCities(country: countryAppEntity)
}
func retrieveCities(country: CountryAppEntity?) async -> [CityAppEntity] {
//retrieve city based on country
//...
}
}
static var defaultQuery = CityEntityQuery()
var id: String // if your identifier is not a String, conform the entity to EntityIdentifierConvertible.
var displayString: String
var displayRepresentation: DisplayRepresentation {
DisplayRepresentation(title: "\(displayString)")
}
init(id: String, displayString: String) {
self.id = id
self.displayString = displayString
}
}
答:
3赞
optz
7/25/2023
#1
找到了解决方案,我会在这里为那些有同样问题的人发布。
@IntentParameterDependency
是将 intent 传递到 AppEntity 的键:
struct CityAppEntityQuery: EntityQuery {
//get the intent and requested property
@IntentParameterDependency<MyIntent>(
\.$country
)
var intent
//code.....
}
评论