[英]How to iterate/foreach array in SwiftUI
我有這個字典數組。
let deckColors = [
["name": "blue", "desc": "desc1"],
["name": "yellow", "desc": "desc2"],
]
而我的觀點:
struct ContentView: View {
var body: some View {
ForEach(0 ..< deckColors.count) {value in
Text(deckColors[value]["name"])
}
}
}
我怎樣才能讓它工作? 當前收到此錯誤:協議類型Any
不能符合StringProtocol
因為只有具體類型才能符合協議
這似乎是實現結構體的一種非常復雜的方法:
struct DeckColor {
var name: String
var desc: String
}
let deckColors = [
DeckColor(name: "blue", desc: "desc1"),
DeckColor(name: "yellow", desc: "desc2")
]
struct ContentView: View {
var body: some View {
ForEach(0 ..< deckColors.count) { value in
Text(deckColors[value].name)
}
}
}
您實現它的方式需要處理字典不包含"name"
值的情況。 你可以這樣做,但它更丑陋,更脆弱:
struct ContentView: View {
var body: some View {
ForEach(0 ..< deckColors.count) { value in
Text(deckColors[value]["name"] ?? "default text if name isn't there.")
}
}
}
這對我有用
struct ContentView: View {
let deckColors = [
["name": "blue", "desc": "desc1"],
["name": "yellow", "desc": "desc2"],
]
var body: some View {
ForEach(0 ..< deckColors.count, id: \.self) {value in
Text(String(self.deckColors[value]["name"]!))
}
}
}
我會將您的套牌顏色放入一個枚舉中,然后對其進行迭代。
enum DeckColor: String, CaseIterable {
case blue
case yellow
var desc: String {
switch self {
case .blue: return "desc1"
case .yellow: return "desc2"
}
}
}
struct ContentView: View {
var body: some View {
VStack(alignment: .leading) {
ForEach(DeckColor.allCases, id: \.self) { color in
Text(color.rawValue)
}
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.