[英]Picker Values from a previous picker - CoreData/SwiftUI
我有一個 SwiftUI 表格,屏幕上有多個選擇器。 第一個是 select 來自存儲在 Core Data 中的數據庫的團隊。 這些團隊中的每一個都與 Player 具有一對多的關系。 以下是實體:
播放器
團隊
在我的內容視圖中,我使用 fetch 請求從 Core Data 獲取所有團隊,然后我將對其進行迭代以完成我的選擇器。
@FetchRequest(sortDescriptors: [])
private var teams: FetchedResults<Team>
@State var teamSelected = 0
var body: some View {
NavigationView{
Form{
Section(header: Text("Team Selection")){
Picker(selection: $teamSelected, label: Text("Team Select")){
ForEach(0..<teams.count){ team in
Text("\(teams[team].name ?? "Unknown")")
}
}
}
}
.navigationBarTitle("Team Selection")
}
}
然后,我希望在此下方有多個選擇器,允許您從該特定團隊中選擇 select 單個玩家。 我嘗試了幾種方法,但從未找到正確的解決方案,而且它們看起來都太啰嗦和老套了。 我的嘗試如下
Picker(selection: $number1, label: Text("#1")){
ForEach(0..<teams[teamSelected].people!.count){player in
Text(player.name)
}
}
有任何想法嗎? 我希望第二個選擇器易於復制,因為我最終會非常需要它
下面的工作嗎?
Picker(selection: $selectedPlayerIndex, label: Text("#1")){
ForEach(0..<teams[teamSelected].people!.count){playerIndex in
Text(teams[teamSelected].people![playerIndex].name)
}
}
因此,對於每個玩家索引,您創建一個帶有該索引處玩家名稱的文本。
如果你需要它很多,你可以為它創建一個結構:
struct PlayerPicker: View {
var team: Team
@Binding var selectedPlayerIndex: Int
var body: some View {
Picker(selection: $selectedPlayerIndex, label: Text("#1")){
ForEach(0..<team.people!.count){playerIndex in
Text(team.people![playerIndex].name)
}
}
}
}
然后你可以像這樣使用它:
@FetchRequest(sortDescriptors: [])
private var teams: FetchedResults<Team>
@State var teamSelected = 0
@State var selectedPlayerIndex: Int
var body: some View {
NavigationView{
Form{
Section(header: Text("Team Selection")){
Picker(selection: $teamSelected, label: Text("Team Select")){
ForEach(0..<teams.count){ team in
Text("\(teams[team].name ?? "Unknown")")
}
}
PlayerPicker(team: teams[teamSelected], selectedPlayerIndex: $selectedPlayerIndex)
}
}
.navigationBarTitle("Team Selection")
}
}
這是一個非常干凈的解決方案; 恕我直言,一點也不hacky。
我無法真正測試這段代碼,也有一段時間沒有用 SwiftUI 編寫代碼,所以如果我在某個地方犯了錯誤,請原諒。 但你無疑明白了。 :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.