Open3

未解決

平成n年生まれ@iOSエンジニア志望平成n年生まれ@iOSエンジニア志望

解決済み

["A", "B", "C", "A"]をListに渡した場合、「id: .self」でエラーは解消されるが、なぜだか分からない。配列[0]と配列[3]は同じもので区別できないはず。
予期せぬトラブルを防ぐためにUUIDをもつitemを自身で定義し、それを使用することが得策か。


2023年12月16日追記

やっぱりmoveでおかしな挙動をする。
この上に重要なことが書いてある。(importantとその上の段落)idの変化で再描画、
https://developer.apple.com/documentation/swiftui/displaying-data-in-lists#Display-data-inside-a-row

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()
                }
            })
        }
    }
}
平成n年生まれ@iOSエンジニア志望平成n年生まれ@iOSエンジニア志望

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で話されていた気がする。