これ、みんなフツーに書いてるけど。
これだけ。
struct ToggleView: View {
@State var isOn = true
var body: some View {
Toggle(isOn ? "ON" : "OFF", isOn: $isOn)
}
}
スゴイよね、SwiftUI。
📱 プロパティの記述
これよ。
@State var isOn = true
プロパティの記述をざっくり考えると、
[@State] [public|private] {let|var} isOn[: Bool] [= true]
となり、数十通りあるのに!
いくつか書き出して試してみます。
let isOn: Bool
let isOn: Bool = true
var isOn: Bool
var isOn: Bool = true
private let isOn: Bool
private let isOn: Bool = true
private var isOn: Bool
private var isOn: Bool = true
@State let isOn: Bool
@State let isOn: Bool = true
@State var isOn: Bool
@State var isOn: Bool = true
@State private let isOn: Bool
@State private let isOn: Bool = true
@State private var isOn: Bool
@State private var isOn: Bool = true
📱 結果
// Cannot find '$isOn' in scope
let isOn: Bool
let isOn: Bool = true
var isOn: Bool
var isOn: Bool = true
private let isOn: Bool
private let isOn: Bool = true
private var isOn: Bool
private var isOn: Bool = true
→ Toggle() の2番目の引数 $isOn が見つからない。
// Property wrapper can only be applied to a 'var'
@State let isOn: Bool
@State let isOn: Bool = true
@State private let isOn: Bool
@State private let isOn: Bool = true
→ @State には var しか使えない。
// Missing argument for parameter 'isOn' in call
@State var isOn: Bool
→ isOn の中身がない。
// Missing argument for parameter 'isOn' in call
// 'ToggleView' initializer is inaccessible due to 'private' protection level
@State private var isOn: Bool
→ isOn の中身がない。
→ private なのでイニシャライザーがアクセスできません。
// OK
@State var isOn: Bool = true
@State private var isOn: Bool = true
→ OK
📱 まとめ
Property wrapper は var 。
中身が変わるからかな。
【SwiftUI】@State を 子 View でどう受けるか 🤔 - @Binding #swiftui #swiftdata #プログラミング
👉 https://t.co/Qk0GRimD6K pic.twitter.com/L4QsFIfKlg— chanzmao (@maochanz) December 25, 2023