Чтобы получить объект 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)
}