ОБНОВЛЕНИЕ: вы можете использовать словарь, который управляет строками и столбцами.
struct ContentView: View {
@State private var chosenLetter = ""
var rows = 3
var columns = 3
@State var dict: Dictionary<Int, Dictionary<Int, String>> = [:]
var body: some View {
VStack {
ForEach(0..<rows, id: \.self) { row in
HStack {
ForEach(0..<self.columns, id: \.self) { column in
Text(self.dict[row]?[column] ?? "")
.modifier(CustomTextBorder())
.onTapGesture(count: 1) {
if let _ = self.dict[row] {
self.dict[row]?[column] = self.chosenLetter
} else {
self.dict[row] = [column: self.chosenLetter]
}
self.chosenLetter = ""
}
}
}
}
.padding(.bottom, 30)
}
}
}
Вы не можете использовать один строковый объект State для связывания с 3 текстовыми полями для достижения этого. Вы должны использовать либо несколько строковых объектов, либо массив строк. Вот минимальный пример того, как этого можно добиться с помощью массива строк. Возможно, вы захотите сделать его более динамичным c, чтобы индексы массива не были c.
struct ContentView: View {
@State private var chosenLetter = ""
@State private var placedLetter = ["", "", ""]
var body: some View {
VStack {
HStack {
Text(self.placedLetter[0])
.modifier(CustomTextBorder())
.onTapGesture(count: 1) {
self.placedLetter[0].isEmpty ? (self.placedLetter[0] = self.chosenLetter): (self.placedLetter[0] = "")
if !self.placedLetter[0].isEmpty {self.chosenLetter = ""}
}
Text(self.placedLetter[1])
.modifier(CustomTextBorder())
.onTapGesture(count: 1) {
self.placedLetter[1].isEmpty ? (self.placedLetter[1] = self.chosenLetter): (self.placedLetter[1] = "")
if !self.placedLetter[1].isEmpty {self.chosenLetter = ""}
}
Text(self.placedLetter[2])
.modifier(CustomTextBorder())
.onTapGesture(count: 1) {
self.placedLetter[2].isEmpty ? (self.placedLetter[2] = self.chosenLetter): (self.placedLetter[2] = "")
if !self.placedLetter[2].isEmpty {self.chosenLetter = ""}
}
}
}
}
}
Кстати, убедитесь, что код, который вы публикуете на SO, имеет правильный отступ и не содержит нежелательных комментариев . Это помогает читателю легко понять вопрос.