SwiftUI сохранить любимый - PullRequest
0 голосов
/ 27 апреля 2020

Итак, у меня есть приложение, например, приложение-ориентир от Apple.

Я пытаюсь выяснить, как сохранить избранное, но я борюсь с ним.

Я пытался с save() и с userDefaults, но без результата.

Некоторые решения используют Toggle(isOn:), но код не использует это.

Код из ориентир-приложения:

Button(action: {
   self.userData.landmarks[self.landmarkIndex]
      .isFavorite.toggle()
}) {
   if self.userData.landmarks[self.landmarkIndex]
      .isFavorite {
      Image(systemName: "star.fill")
         .foregroundColor(Color.yellow)
   } else {
      Image(systemName: "star")
         .foregroundColor(Color.gray)
   }
}

Одной из моих попыток было следующее:

Button(action: {
                    UserDefaults.standard.set(self.userData.landmarks[self.landmarkIndex]
                        .isFavorite.toggle(self.isFavorite, forKey: Bool)
                    )
                }) {
                    if UserDefaults.standard.set(self.userData.landmarks[self.landmarkIndex])
                        .isFavorite {
                        Image(systemName: "star.fill")
                            .foregroundColor(Color.yellow)

                        } else {
                        Image(systemName: "star")
                            .foregroundColor(Color.gray)
                    }

Я получаю ошибку «Тип выражения неоднозначен без дополнительного контекста».

Действие кнопки встроен в элемент навигации.

код для userData находится в файле UserData.swift:

import SwiftUI

final class UserData: ObservableObject {
    @Published var showFavoritesOnly = false
    @Published var landmarks = landmarkData
}

и

@EnvironmentObject var userData: UserData

используется в landmarkdetail.swift файл, в котором размещено действие кнопки

...