SwiftUI - .append в функции init не работает - PullRequest
0 голосов
/ 02 августа 2020

У меня есть struct с именем Tile, который объявлен так:

struct Tile {
    var index: Int
    var value: String
}

У меня также есть несколько State переменных:

@State var rows: Int
@State var cols: Int
@State var tiles: [Tile]
@State var texts: [String]

У меня есть это init function:

init() {
    _rows = State(initialValue: 3)
    _cols = State(initialValue: 3)
    _tiles = State(initialValue: [])
    _texts = State(initialValue: [])
    for i in 0...self.rows*self.cols-1 {
        let tile = Tile(index: i+1, value: String(format: "%02d", i+1))
        tiles.append(tile)
        texts.append(tile.value)
    }
}

Однако установка точки останова показывает, что массивы на самом деле не добавляют значения в массивы. Почему это происходит и как это исправить?

1 Ответ

0 голосов
/ 02 августа 2020

@State переменные могут быть изменены только вне функции init. Если вы попытаетесь изменить их непосредственно в init, не будет никакого эффекта - если вы их не инициализируете (например, State(initialValue: rows)).

Попробуйте вместо этого следующее:

init() {
    let rows = 3
    let cols = 3
    var tiles = [Tile]()
    var texts = [String]()
    for i in 0...(rows * cols - 1) {
        let tile = Tile(index: i+1, value: String(format: "%02d", i+1))
        tiles.append(tile)
        texts.append(tile.value)
    }
    _rows = State(initialValue: rows)
    _cols = State(initialValue: cols)
    _tiles = State(initialValue: tiles)
    _texts = State(initialValue: texts)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...