我想为“contextMenu forSelectionType: menu:”添加 iOS16 API,但我还需要支持 iOS15,因此我需要一个条件ViewModifier
。我正在努力寻找正确的语法。
据我所知,我的ViewModifier
应该是这样的:
struct CompatibilityListContextMenuModifier<V>: ViewModifier where V: View {
let menu: (Set<Person.ID>) -> V
func body(content: Content) -> some View {
if #available(iOS 16.0, macOS 13.0, *) {
content
.contextMenu(forSelectionType: Person.ID.self, menu: menu)
} else {
content
}
}
}
但我如何在我的列表中使用它:
List (selection: $contactsListOptions.multiSelectedContacts){
// ...
}
.modifier(CompatibilityListContextMenuModifier(menu: items in {
if items.isEmpty { // Empty area menu.
Button("New Item") { }
} else if items.count == 1 { // Single item menu.
Button("Copy") { }
Button("Delete", role: .destructive) { }
}
else {
Button("MultipleSelection Items") { }
}
}))
这给了我一个语法错误:
在范围内找不到“项目”
如果我尝试传递选择绑定:
.modifier(CompatibilityListContextMenuModifier(menu: contactsListOptions.multiSelectedContacts in {
if contactsListOptions.multiSelectedContacts.isEmpty { // Empty area menu.
Button("New Item") { }
} else if contactsListOptions.multiSelectedContacts.count == 1 { // Single item menu.
Button("Copy") { }
Button("Delete", role: .destructive) { }
}
else {
Text("MultipleSelection Items")
}
}))
我收到错误:
无法将类型“Set<Person.ID>”(又名“Set”)的值转换为预期参数类型“(Set<Person.ID>) -> V”(又名“(Set) -> V”)
和
无法推断通用参数“V”
有条件地编译此 API 的正确方法是什么?