В SwiftUI, что произойдет, если Переменная привязки является частью другой переменной привязки?

#ios #swift #swiftui

Вопрос:

Я довольно новичок в SwiftUI, и мне было любопытно, что произойдет, если родительское представление передаст две переменные привязки в дочернее состояние, т. е. одна переменная на самом деле является частью другой переменной (например $item ,amp; $item[0] ).

В представлении ребенка я сначала изменяю item и подтверждаю, что items это также обновляется. Затем я обновился items и заметил, что item это тоже мутировало. Это означает, что если мы установим items значение в пустой массив, то будет отсутствующий индекс для item . Существует ли строгое объяснение этого с точки зрения памяти, обернутого значения/проектного значения и т. Д.?

 struct ChildView: View {
    @Binding var item: String
    @Binding var items: [String]
    
    var body: some View {

        return Button("test") {
            self.item = "hello"
            print("item: "   self.item)
            print("items: "   self.items.description)
            self.items = ["new", "world"]
            print("item: "   self.item)
        }
    }
}


struct ContentView: View {
    @State var list: [String] = ["oldZero", "oldOne"]
    var body: some View {
        ChildView(item: $list[0], items: $list)
    }
}
 

и в результате получается:

 item: hello
items: ["hello", "oldOne"]
item: new