Значение SwiftUI State не меняется - PullRequest
0 голосов
/ 28 мая 2020

Я не знаком с State. Я протестировал код:

import SwiftUI
class TestState {
    @State var a: Int = 3
    func increaseA() {
        print("before \(a)") //3
        a += 1
        print("after \(a)") //3?
    }
}

TestState().increaseA()

Бывает, что напечатанное значение равно 3! Где я сделал не так?

После комментария, что State должно быть в View, я протестировал код:

import SwiftUI
struct TestState: View {
    @State var a: Int = 3
    func increaseA() {
        print("before \(a)")
        a += 1
        print("after \(a)")
    }

    var body: some View {
        increaseA()
        return Text(a.description)
    }
}

Бывает, что Text показывает " 3 ", а не" 4 ". Я не понимаю

1 Ответ

1 голос
/ 28 мая 2020

@ State ключевое слово было впервые введено в Swift5.1, это @propertyWrapper, ранее называлось @ propertyDelegate . Подробнее см. property-wrappers.md . КАК ПОЛ ХАДСОН СКАЗАЛ: @ State специально разработан для использования в локальном представлении, Apple рекомендует помечать свойства @ State как частные, чтобы действительно подтвердить, что они не предназначены для доступа в другом месте:

...