инициализация подробного представления в swiftUI - PullRequest
1 голос
/ 25 марта 2020

Я пишу приложение со списком задач, и у меня возникают проблемы при инициализации подробного представления. в HomeView я использую foreach для настройки каждой строки.

struct HomeListView: View {
    ForEach(items) { item in
        NavigationLink(destination: ItemDetailView(item: item, editMode: true)) {
        ItemView(title: item.title, text: item.text, type: item.type, dueDate: item.dueDate)
    }
}

в ItemDetailView я определил init () для установки заголовка, текста и других свойств.

struct ItemDetailView: View {
    @State var title: String = ""
    @State var text: String = ""
    @State var type: Int = 0
    @State var dueDate: Date = Date()

    init(item: ItemEntity, editMode: Bool) {
        self.title = item.title
        self.text = item.text
        self.type = item.type
        self.dueDate = item.dueDate
        self.item = item

        print(item.title)
        if self.title.isEmpty {
            print(self.title)
        }

        self.editMode = editMode

        print(self.editMode)
    }
}

когда я запускаю приложение, в консоли оно печатает

2

true
4

true

я вижу, что init () получает элемент и правильно устанавливает режим редактирования, но я не могу понять, почему заголовок, текст, тип и Свойства dueDate устанавливаются в их значения по умолчанию вместо значений в элементе, которые получает init.

это имеет какое-либо отношение к оболочке @State? как я могу установить их значения на то, что я хочу? Спасибо за помощь!

1 Ответ

0 голосов
/ 25 марта 2020

это имеет какое-либо отношение к обертке @State?

Да, это так. Состояние должно быть инициализировано через init следующим образом (пример для одного)

struct ItemDetailView: View {
    @State var title: String        // << no, default value
    ...

    init(item: ItemEntity, editMode: Bool) {
        self._title = State<String>(initialValue: item.title) // << explicitly !!
        ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...