We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
UserDefaults를 통해 데이터를 모델화하게 저장하는 방법에 대해 살펴보겠음
이 방식 말고도 Realm을 사용해서 데이터를 모델화 할 수 도 있음. (이건 추후 TIL에서 정리해보겠음)
이 방식을 사용한다면 propertyWrapper를 사용 안 해도 괜찮을 거 같다는 생각이 들었음
일단 구조체를 만들거임
import Foundation struct Bookmark: Codable { let sourceLanguage: String let translatedLanguage: String let sourceText: String let translatedText: String }
필요한 부분만 만들어서 구조체를 사용해주면 됨
나 같은 경우에는 ViewController에서 저장하고 싶은 라벨의 텍스트가 4개이므로 구조체에 String타입으로 4개를 만들어줌
Codable 채택한 이유를 나중에 알려줌
그 다음에 살펴볼 코드는 UserDefaults임
UserDefaults.standard.set(seungchanLabel.text, forKey: "seungchan")
이렇게 저장하고
UserDefaults.standard.string(forKey: "seungchan")
이렇게 데이터를 불러오잔슴?
이런 과정을 get, set을 통해 한번에 처리해줄거임
extension UserDefaults { enum Key: String { case bookmarks } var bookmarks: [Bookmark] { get { guard let data = UserDefaults.standard.data(forKey: Key.bookmarks.rawValue) else { return [] } return (try? PropertyListDecoder().decode([Bookmark].self, from: data)) ?? [] } set { UserDefaults.standard.setValue( try? PropertyListEncoder().encode(newValue), forKey: Key.bookmarks.rawValue ) } } }
이게 전체 코드임
bookmark를 enum으로 만들어서 사용하는 이유는 유지보수 할 때 편함
열거형으로 만들어서 사용할 때 유지보수가 편한다는 말은
음 추후에 다른 모델의 데이터를 관리하고 싶다면 enum에 추가해서 사용하면 됨
만약 bookmark를 지우고 다른 걸 사용하고 싶다면 그냥 변경만 해주면 됨.
그 다음에 매번 key값을 입력하기 보다는 enum의 rawValue 로 사용한다면 이런 수고스러움을 덜 수 있음
enum의 rawValue
계산 프로퍼티 get set 이 있음
계산 프로퍼티
get
set
여기서 하나하나 보기엔 너무 오래 걸려서 get은 읽기, set은 쓰기 정도로 생각하고 넘어가면 됨
ㅇㅋ 여기까지 구조에 대해 살펴봤고 이제부터 찐임
코드의 get 부분을 살펴보면 UserDefaults의 data를 저장하는 과정이 보임
아니 굳이 Array로 만들어서 사용하거나 다 String값인데 그냥 사용하면 안되나? 라는 의문이 생길텐데
UserDefaults는 객체를 바로 저장할 수 없고, data 형태로 바꿔서 저장을 해야함 (애플 권장 사항)
data 형태로 바꿔서 저장을 해야함 (애플 권장 사항)
data를 decode 하기 위해 사용함
data를 encode 하기 위해 사용함
그래서 처음에 구조체에 Codable 채택 이유가 차피 decode encode의 과정이 필요하므로
decode
encode
걍 한 번에 Codable 채택해서 사용해주는 거임 ㅇㅇ
Codable
이게 UserDefaults의 대략적인 코드고 이제 실제 적용을 해봐야 하지 않겠음 ?
let current: [Bookmark] = UserDefaults.standard.bookmarks let new = Bookmark( sourceLanguage: translatorManager.sourceLanguage, translatedLanguage: translatorManager.targetLanguage, sourceText: sourceText, translatedText: translatedText ) UserDefaults.standard.bookmarks = [new] + current
이건 버튼을 눌렀을 때 동작하는 함수의 일부분임
current는 Bookmark를 배열에 담고 UserDefaults의 현재 저장되어 있는 값임
new는 버튼을 클릭하면 저장되는 새로운 데이터들이고 Bookmark 구조체를 초기화시키고 배열 형태로 저장함
UserDefaults.standard.bookmarks = [new] + current
그리고 마지막에 이렇게 저장을 해주면 댐
데이터가 제대로 저장되어 있는지 dump를 찍어보면 (dump는 데이터를 정렬해서 보여줌)
깔끔하게 나옴
그럼 이제 데이터를 뿌리는 과정을 보여드림
UI를 커스텀해서 사용하기에는 컬렉션뷰가 테이블뷰보다 나아서 컬렉션뷰를 사용함
private var bookmark: [Bookmark] = [] ` ` ` extension StarListViewController: UICollectionViewDataSource { func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { bookmark.count }
평상시에 우리가 하던 방식과 동일하게 뿌려주면 됨
그럼 이제 Bookmark에 저장된 데이터들이 쭈욱 보여질거임
UserDefaults를 위와 같은 방식으로 사용해서 데이터 관리하는 것도 좋다고 생각함 코드를 작성하는 면에서 오히려 Realm보다 더 쉽다고 생각이 듦
The text was updated successfully, but these errors were encountered:
너무 유익한 글이에요👍
Sorry, something went wrong.
seungchan2
No branches or pull requests
UserDefaults를 통해 데이터를 모델화하게 저장하는 방법에 대해 살펴보겠음
이 방식 말고도 Realm을 사용해서 데이터를 모델화 할 수 도 있음. (이건 추후 TIL에서 정리해보겠음)
이 방식을 사용한다면 propertyWrapper를 사용 안 해도 괜찮을 거 같다는 생각이 들었음
일단 구조체를 만들거임
필요한 부분만 만들어서 구조체를 사용해주면 됨
나 같은 경우에는 ViewController에서 저장하고 싶은 라벨의 텍스트가 4개이므로 구조체에 String타입으로 4개를 만들어줌
Codable 채택한 이유를 나중에 알려줌
그 다음에 살펴볼 코드는 UserDefaults임
이렇게 저장하고
이렇게 데이터를 불러오잔슴?
이런 과정을 get, set을 통해 한번에 처리해줄거임
이게 전체 코드임
bookmark를 enum으로 만들어서 사용하는 이유는 유지보수 할 때 편함
열거형으로 만들어서 사용할 때 유지보수가 편한다는 말은
음 추후에 다른 모델의 데이터를 관리하고 싶다면 enum에 추가해서 사용하면 됨
만약 bookmark를 지우고 다른 걸 사용하고 싶다면 그냥 변경만 해주면 됨.
그 다음에 매번 key값을 입력하기 보다는
enum의 rawValue
로 사용한다면 이런 수고스러움을 덜 수 있음계산 프로퍼티
get
set
이 있음여기서 하나하나 보기엔 너무 오래 걸려서 get은 읽기, set은 쓰기 정도로 생각하고 넘어가면 됨
ㅇㅋ 여기까지 구조에 대해 살펴봤고 이제부터 찐임
코드의 get 부분을 살펴보면 UserDefaults의 data를 저장하는 과정이 보임
아니 굳이 Array로 만들어서 사용하거나 다 String값인데 그냥 사용하면 안되나? 라는 의문이 생길텐데
UserDefaults는 객체를 바로 저장할 수 없고,
data 형태로 바꿔서 저장을 해야함 (애플 권장 사항)
PropertyListDecoder()
data를 decode 하기 위해 사용함
PropertyListEncoder()
data를 encode 하기 위해 사용함
그래서 처음에 구조체에 Codable 채택 이유가 차피
decode
encode
의 과정이 필요하므로걍 한 번에
Codable
채택해서 사용해주는 거임 ㅇㅇ이게 UserDefaults의 대략적인 코드고 이제 실제 적용을 해봐야 하지 않겠음 ?
이건 버튼을 눌렀을 때 동작하는 함수의 일부분임
current는 Bookmark를 배열에 담고 UserDefaults의 현재 저장되어 있는 값임
new는 버튼을 클릭하면 저장되는 새로운 데이터들이고 Bookmark 구조체를 초기화시키고 배열 형태로 저장함
그리고 마지막에 이렇게 저장을 해주면 댐
데이터가 제대로 저장되어 있는지 dump를 찍어보면 (dump는 데이터를 정렬해서 보여줌)
깔끔하게 나옴
그럼 이제 데이터를 뿌리는 과정을 보여드림
UI를 커스텀해서 사용하기에는 컬렉션뷰가 테이블뷰보다 나아서 컬렉션뷰를 사용함
평상시에 우리가 하던 방식과 동일하게 뿌려주면 됨
그럼 이제 Bookmark에 저장된 데이터들이 쭈욱 보여질거임

결론
The text was updated successfully, but these errors were encountered: