Получение кодируемых объектов из UserDefaults в iOS с помощью Swift: методы и примеры кода

Чтобы получить объект Codableиз UserDefaultsв iOS с помощью Swift, вы можете использовать следующие методы:

Метод 1: использование метода decode(_:forKey:)

// Define your Codable struct
struct MyObject: Codable {
    var name: String
    var age: Int
}
// Fetch the object from UserDefaults
if let data = UserDefaults.standard.data(forKey: "myObjectKey") {
    do {
        let myObject = try JSONDecoder().decode(MyObject.self, from: data)
        // Use the fetched object
        print(myObject.name)
        print(myObject.age)
    } catch {
        print("Error decoding object: \(error)")
    }
}

Метод 2. Использование расширения для UserDefaults

extension UserDefaults {
    func fetchCodableObject<T: Codable>(forKey key: String) -> T? {
        guard let data = UserDefaults.standard.data(forKey: key) else { return nil }
        do {
            let object = try JSONDecoder().decode(T.self, from: data)
            return object
        } catch {
            print("Error decoding object: \(error)")
            return nil
        }
    }
}
// Usage:
if let myObject: MyObject = UserDefaults.standard.fetchCodableObject(forKey: "myObjectKey") {
    // Use the fetched object
    print(myObject.name)
    print(myObject.age)
}

Метод 3. Использование вспомогательной функции

func fetchCodableObject<T: Codable>(fromUserDefaultsKey key: String) -> T? {
    guard let data = UserDefaults.standard.data(forKey: key) else { return nil }
    do {
        let object = try JSONDecoder().decode(T.self, from: data)
        return object
    } catch {
        print("Error decoding object: \(error)")
        return nil
    }
}
// Usage:
if let myObject: MyObject = fetchCodableObject(fromUserDefaultsKey: "myObjectKey") {
    // Use the fetched object
    print(myObject.name)
    print(myObject.age)
}