Как я могу инициализировать переменную @State в функции init в SwiftUI? - PullRequest
0 голосов
/ 08 ноября 2019

Давайте посмотрим на простой исходный код:

import SwiftUI

struct MyView: View {
    @State var mapState: Int

    init(inputMapState: Int)
    {
        mapState = inputMapState //Error: 'self' used before all stored properties are initialized
    } //Error: Return from initializer without initializing all stored properties

    var body: some View {
        Text("Hello World!")
    }
}

Мне нужна здесь функция init, потому что я хочу выполнить некоторую загрузку данных здесь, но есть одна проблема, переменная @State не может быть инициализирована здесь! Как я мог это сделать? Может быть, это очень простой вопрос, но я не знаю, как это сделать. Большое спасибо!

Ответы [ 3 ]

0 голосов
/ 08 ноября 2019

Я думаю, что лучше было бы инициализировать, когда вы пишете код.

, как

@ State var mapState = 0

или, если вы хотите связать значение с другим представлением, используйте @ Binding.

Надеюсь, вы тоже это проверите.

https://www.hackingwithswift.com/quick-start/swiftui/what-is-the-binding-property-wrapper

0 голосов
/ 09 ноября 2019

Мы можем ввести данные, которые нужны представлению.

Используется модель, которая имеет доступ к нужным вам данным. Создайте вид карты и используйте этот экземпляр в родительском виде. Это также поможет модульному тестированию модели.

Использовал обертку свойства @Binding для передачи данных из родительского представления в MapView и использовал _mapState, который содержит значение mapState.

struct Model {
 //some data
}

struct MapView {
    private let model: Model
    @Binding var mapState: Int

    init(model: Model, mapState: Binding<Int>) {
        self.model = model
        self._mapState = mapState
    }
}

extension MapView: View {

    var body: some View {
        Text("Map Data")
    }
}
0 голосов
/ 08 ноября 2019

Вы можете установить начальное значение для mapState, например:

@State var mapState: Int = 0

После этого вы сможете установить значение, переданное в метод init.

...