Post

[Ios App] BookMark 기능

[Ios App] BookMark 기능

로컬 설정같은 정보를 저장하는 방식에는 여러가지가 있다. 처음엔 DB.json 파일에 var isFavorite: Bool 방식으로 키고 끄는 방식을 생각했는데, DB를 수정해야하는 번거로움 때문에 보류.

보통 “즐겨찾기”같은 개인정보는 JSON 대신 Swift에서 지원하는 “UserDefaults”를 사용해보려 한다.

기본 사용 구조

1
2
3
4
5
6
7
8
9
10
11
12
struct FavoritesManager {
    private static let key = "favorites"

    static func saveFavorites(_ favorites: [String]) {
        UserDefaults.standard.set(favorites, forKey: key)
    }

    static func loadFavorites() -> [String] {
        return UserDefaults.standard.stringArray(forKey: key) ?? []
    }
}

Trouble Shooting

버튼을 누르면 즐겨찾기 저장은 되지만 바로 새로고침되지 않음 (다른 View로 갔다 와야 refresh 됨)

-> @State 로 변화를 감시 해줘야하는데 ScriptListView를 List 형식으로 구현해놔서 매번 모든 리스트를 다시 로드해야 되는 과정 필요.

-> List 목록 하나를 ScriptRowView로 구현후 List 목록 하나씩 @State로 추적하는 방식 사용

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
struct ScriptRowView: View {
    let script: Script
    @State private var isFavorite: Bool

    init(script: Script) {
        self.script = script
        self._isFavorite = State(initialValue: FavoritesManager.isFavorite(scriptID: script.title))
    }

    var body: some View {
        HStack {
            // 썸네일 + 제목 + 즐겨찾기 버튼 구현
        }
    }
}

이렇게 행 하나를 @State 로 관리해주면 !

즉각적인 이미지 refresh 가 가능해진다.

This post is licensed under CC BY 4.0 by the author.