Использование struct id в списке swiftui - PullRequest
0 голосов
/ 11 марта 2020

Я попытался перечислить массив struct с помощью swiftUI.

import SwiftUI

struct User: Codable {
    var id: UUID
    var name: String
}

struct MyView: View {
    @State private var users = [User]()

    var body: some View {
        List(users, id: \.id) {    // Type '_' has no member 'id'
            VStack(alignment: .leading) {
                Text($0.name)
                    .font(.headline)
            }
        }
    }
    ...
}

Но компилятор сообщает об ошибке, показывающей, что у пользовательской структуры нет свойства id.

Ответы [ 2 ]

2 голосов
/ 11 марта 2020

При первом добавлении свойства id недостаточно, пользователь должен соответствовать Идентифицируемому

struct User: Identifiable, Codable {
    var id: UUID
    var name: String
}

Далее его легко использовать в качестве источника списка

struct ContentView: View {
    @State private var users = [User]()

    var body: some View {
        VStack {
            List(users) {
                Text($0.name)
                    .font(.headline)
            }
            Button(action: {
                let u = User(id: UUID(), name: "Name \(Int.random(in: 0 ..< Int.max))")
                self.users.append(u)
            }) {
                Text("Add User")
            }
        }
    }
}

Список знает Свойство id существует, поэтому вам не нужно использовать его в конструкторе List.

2 голосов
/ 11 марта 2020

должно быть как ниже

var body: some View {
    List(users, id: \.id) { user in   // << here !!
        VStack(alignment: .leading) {
            Text(user.name)           // << due to in different block
                .font(.headline)
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...