Open3
未解決
ViewModelにFocusStateを持たせたい。
あれこれ試行錯誤するも、どうしてもランタイムワーニングが出る。
解決済み
["A", "B", "C", "A"]をListに渡した場合、「id: .self」でエラーは解消されるが、なぜだか分からない。配列[0]と配列[3]は同じもので区別できないはず。
予期せぬトラブルを防ぐためにUUIDをもつitemを自身で定義し、それを使用することが得策か。
2023年12月16日追記
やっぱりmoveでおかしな挙動をする。
この上に重要なことが書いてある。(importantとその上の段落)idの変化で再描画、
struct ContentView: View {
@State private var companies = ["Google", "Apple", "Facebook", "Amazon", "Amazon"]
var body: some View {
NavigationStack {
List {
ForEach(companies, id: \.self) { company in
Text(company)
}
.onMove(perform: { indices, newOffset in
print(indices, newOffset)
companies.move(fromOffsets: indices, toOffset: newOffset)
})
}
.toolbar(content: {
ToolbarItem {
EditButton()
}
})
}
}
}
SwiftUIの初期化について
疑問のコード その1
//// このコードだとitemsは空配列となる
//struct ContentView: View {
// @State private var items: [String] = .init()
//
// init() {
// self.items = ["a", "b", "c"]
// }
//
// var body: some View {
// Text(items.description)
// .font(.largeTitle)
// }
//}
// @Stateを外すと["a", "b", "c"]となる
struct ContentView: View {
private var items: [String] = .init()
init() {
self.items = ["a", "b", "c"]
}
var body: some View {
Text(items.description)
.font(.largeTitle)
}
}
疑問のコード その2
Optional<Item>型のItemをOptional<Int>型のnumにへこうするとエラーを出さなくなる。
struct Item: Identifiable {
let id = UUID()
let name: String
}
struct ContentView: View {
@State private var num: Int? = nil // こっちはOK
// @State private var item: Item? = nil // こっちはNG
@State private var items: [Item]
init() {
self.items = [
.init(name: "a"),
.init(name: "b"),
.init(name: "c"),
]
}
var body: some View {
Text(items.description)
}
}
状態監視のプロパティラッパに関しては、いつぞやのWWDCで話されていた気がする。