UserDefaults에 개체 저장
하지만 이봐, 가끔 우리는 게으르다.
최근에 내 트위터 친구가 UserDefaults에 개체를 저장하는 방법을 물었고 그는 이 확장 기능을 좋아하는 것 같아서 멋진 여러분 모두와 공유할 수 있다고 생각했습니다!
스토어에도 앱이 있다는 사실을 알고 계셨나요? 확인해보세요 -> RunRooster
자, 자만하지 말고 바로 시작합시다. 뒤에서 조용히! 🤫
준비 🧩
먼저 저장할 개체를 만듭니다. 앱에서 사용할 수 있는 간단한 개체입니다.
struct UserSettings: Codable {
var userID: Int?
var modePreference: String?
var volumeLevel: Int?
var highScore: Int?
enum CodingKeys: String, CodingKey {
case userID = "id"
case modePreference = "mode_preference"
case volumeLevel = "volume_level"
case highScore = "highscore"
}
}
서버에서도 해당 정보를 얻을 경우를 대비하여 해당 CodingKeys를 보너스로 추가했습니다. 그리고 snake_case는 작년에 soooo입니다. 엄마 맞죠?
이제 우리는 일부 사용자를 유지할 수 있는 멋진 UserSettings를 얻었습니다....설정? 🥁
이것은 사용자가 일부 정보를 변경했지만 Wi-Fi 또는 다른 유형의 인터넷 연결이 없는 경우에 매우 유용하므로 이 개체를 보관하고 나중에 보낼 수 있습니다.
다음으로 이것은 의무 사항이 아니며 모든 키를 보유하는 별도의 개체를 만듭니다. 키에 손으로 입력한 문자열을 한 번 사용하는 실수를 저질렀습니다... 그리고 다시는 사용하지 않습니다. (악몽 같은 것)
struct Keys {
static let userSettings = "userSettings"
}
처형 🤯🔫
절약
여기에 흥미로운 부분이 있습니다. 해당 개체를 UserDefaults에 저장할 확장을 만들어 보겠습니다.
extension UserDefaults {
static func saveUserSettings(_ settings: UserSettings) {
do {
let encodedUserSettings = try JSONEncoder().encode(settings)
UserDefaults.standard.set(encodedUserSettings, forKey: Keys.userSettings)
UserDefaults.standard.synchronize() // this line is a joke btw, read the summary, so awesome :)
} catch {
print("Error saving User Settings.")
}
}
//... loading code goes here
}
그게 다야!
아주 쉽죠? 이제 일부 개발자(나 자신 포함)가 나중에 사용할 수 있도록 작은 개체를 저장하는 이 빠르고 지저분한 방법을 정말 좋아하는 이유를 알 것입니다.
로드 중
위와 같지만 반대로 ⏪
//... saving code
static func loadUserSettings() -> UserSettings? {
guard let settings = UserDefaults.standard.object(forKey: Keys.userSettings),
let loadedSettings = settings as? Data else {
return nil
}
return try? JSONDecoder().decode(UserSettings.self, from: loadedSettings)
}
유일한 차이점은 여기에서 반환이 선택 사항이라는 것입니다. 아직 아무것도 저장하지 않았을 수도 있습니다. 🤷♂️
게으름에 대한 모든 농담은 차치하고 UserDefaults 크기는 앱 로딩 시간에 영향을 미치며 더 작은 객체에만 사용해야 한다는 점을 명심하십시오. 또한 사용자 비밀번호를 저장하면 거대한 NO-NO가 있습니다.
미래의 코딩 노력에 도움이 되기를 바랍니다!
읽어주셔서 감사합니다, 당신은 사랑스러운 사람입니다! ♥️ [Twitter][twitter]에 접속해볼까요?
Reference
이 문제에 관하여(UserDefaults에 개체 저장), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/emin_ui/saving-objects-to-userdefaults-4omj텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)