Не удается сохранить массив пользовательских классов в UserDefaults

Проблема заключается в том, что когда браузер встречает закрывающий тег </script> внутри открытого тега <script>, независимо от контекста, в котором он используется, он завершает там тег сценария. Есть несколько способов избежать этого.

Вариант 1 - Побег / в теге закрытия script:

var script = '<script async src="//somesite.com/feed/livetrend.js"><\/script>';

Вариант 2 - Оберните JavaScript в прокомментировал HTML-комментарии:

<script>
/*<!--*/
var script = '<script async src="//somesite.com/feed/livetrend.js"></script>';
/*-->*/
</script>

Вариант 3 - Поместите JavaScript во внешний файл:

Конечно, перемещение JavaScript во внешний файл вообще позволит избежать этой проблемы это может быть не предпочтительнее.

0
задан SwiftNewling 3 March 2019 в 19:55
поделиться

1 ответ

Чаще всего я вижу использование разработчиком codeable, здесь я использую пользователя в качестве примера:

YourDataModel.swift

struct User: Codable {
    var userId: String = ""
    var name: String = ""
    var profileImageData: Data? }

UserDefaults .swift

import Foundation

extension UserDefaults {

    /// The current user of the application, see `./Models/User.swift`
    var currentUser: User? {
        get {
            guard let userData = self.object(forKey: #function) as? Data else { return nil }
            return try? JSONDecoder().decode(User.self, from: userData)
        }

        set {
            guard let newuser = newValue else { return }
            if let userData = try? JSONEncoder().encode(newuser) {
                self.set(userData, forKey: #function)
            }
        }
    }

}

Преобразовать данные в данные json ... #function - это имя функции или значения, т. е.

    // For the case the user doesn't yet exist.
    if ( UserDefaults.standard.currentUser == nil )  {
        // Create a new user
        user = User()
        // Generate an id for the user, using a uuid.
        user?.userId = UUID().uuidString
    } else {
        // otherwise, fetch the user from user defaults.
        user = UserDefaults.standard.currentUser
    }
0
ответ дан RLoniello 3 March 2019 в 19:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: