如何在 SwiftUI 的列表中设置和使用参数 "selection"
How can I set and use the argument "selection" in List in SwiftUI
我了解了 SwiftUI,但在理解 SwiftUI 中的 List 时遇到困难。
列表定义如下。
@available(iOS 13.0, OSX 10.15, tvOS 13.0, watchOS 6.0, *)
public struct List<SelectionValue, Content> : View where SelectionValue : Hashable, Content : View {
/// Creates a List that supports multiple selection.
///
/// - Parameter selection: A binding to a set that identifies the selected
/// rows.
///
/// - See Also: `View.selectionValue` which gives an identifier to the rows.
///
/// - Note: On iOS and tvOS, you must explicitly put the `List` into Edit
/// Mode for the selection to apply.
@available(watchOS, unavailable)
public init(selection: Binding<Set<SelectionValue>>?, @ViewBuilder content: () -> Content)
/// Creates a List that supports optional single selection.
///
/// - Parameter selection: A binding to the optionally selected row.
///
/// - See Also: `View.selectionValue` which gives an identifier to the rows.
///
/// - Note: On iOS and tvOS, you must explicitly put the `List` into Edit
/// Mode for the selection to apply.
@available(watchOS, unavailable)
public init(selection: Binding<SelectionValue?>?, @ViewBuilder content: () -> Content)
:
:
}
那我的问题是这样的,怎么才能有支持multiple/single选择的List呢?
我会知道如何设置 Binding<Set<SelectionValue>>?
和 Binding<Set<SelectionValue>>?
的参数。
我已经阅读了 ,并且我有这段代码。此代码确实支持多选。
var demoData = ["Phil Swanson", "Karen Gibbons", "Grant Kilman", "Wanda Green"]
struct ContentView: View {
@State var selectKeeper = Set<String>()
var body: some View {
NavigationView {
List(demoData, id: \.self, selection: $selectKeeper){ name in
Text(name)
}
.navigationBarItems(trailing: EditButton())
.navigationBarTitle(Text("Selection Demo \(selectKeeper.count)"))
}
}
}
但仍然无法理解如何设置参数 "selection" 以及设置类型。如何更改为单选列表?什么是 Set<String>()
...?
有没有人解释简单易懂?
我会有简单的例子...
非常感谢老师!感谢您阅读我的问题!!
How can I change to single selection List?
@State var selectKeeper: String? = nil // << default, no selection
What is Set()...?
所选项目的容器,在您的例子中是来自 demoData
的字符串
how I can set the argument "selection" and set the type as well
一个变体在 .onAppear
中,如下所示
List(demoData, id: \.self, selection: $selectKeeper){ name in
Text(name)
}
.onAppear {
self.selectKeeper = [demoData[0]]
}
selected的类型通过状态变量的类型检测,如果设置为多选,如果为optional则为单选。
我了解了 SwiftUI,但在理解 SwiftUI 中的 List 时遇到困难。
列表定义如下。
@available(iOS 13.0, OSX 10.15, tvOS 13.0, watchOS 6.0, *)
public struct List<SelectionValue, Content> : View where SelectionValue : Hashable, Content : View {
/// Creates a List that supports multiple selection.
///
/// - Parameter selection: A binding to a set that identifies the selected
/// rows.
///
/// - See Also: `View.selectionValue` which gives an identifier to the rows.
///
/// - Note: On iOS and tvOS, you must explicitly put the `List` into Edit
/// Mode for the selection to apply.
@available(watchOS, unavailable)
public init(selection: Binding<Set<SelectionValue>>?, @ViewBuilder content: () -> Content)
/// Creates a List that supports optional single selection.
///
/// - Parameter selection: A binding to the optionally selected row.
///
/// - See Also: `View.selectionValue` which gives an identifier to the rows.
///
/// - Note: On iOS and tvOS, you must explicitly put the `List` into Edit
/// Mode for the selection to apply.
@available(watchOS, unavailable)
public init(selection: Binding<SelectionValue?>?, @ViewBuilder content: () -> Content)
:
:
}
那我的问题是这样的,怎么才能有支持multiple/single选择的List呢?
我会知道如何设置 Binding<Set<SelectionValue>>?
和 Binding<Set<SelectionValue>>?
的参数。
我已经阅读了
var demoData = ["Phil Swanson", "Karen Gibbons", "Grant Kilman", "Wanda Green"]
struct ContentView: View {
@State var selectKeeper = Set<String>()
var body: some View {
NavigationView {
List(demoData, id: \.self, selection: $selectKeeper){ name in
Text(name)
}
.navigationBarItems(trailing: EditButton())
.navigationBarTitle(Text("Selection Demo \(selectKeeper.count)"))
}
}
}
但仍然无法理解如何设置参数 "selection" 以及设置类型。如何更改为单选列表?什么是 Set<String>()
...?
有没有人解释简单易懂? 我会有简单的例子...
非常感谢老师!感谢您阅读我的问题!!
How can I change to single selection List?
@State var selectKeeper: String? = nil // << default, no selection
What is Set()...?
所选项目的容器,在您的例子中是来自 demoData
how I can set the argument "selection" and set the type as well
一个变体在 .onAppear
中,如下所示
List(demoData, id: \.self, selection: $selectKeeper){ name in
Text(name)
}
.onAppear {
self.selectKeeper = [demoData[0]]
}
selected的类型通过状态变量的类型检测,如果设置为多选,如果为optional则为单选。