๐ŸŽ iOS

[iOS][CN] UserDefaults ์‚ฌ์šฉํ•˜๊ธฐ

coram22 2025. 2. 6. 18:34
728x90
๋ฐ˜์‘ํ˜•
728x90

๋„์ ๋„์  (์ด ๋‚ด์šฉ์€ ๋„˜๊ฒจ๋„ ๋ผ์š”)

์•„์ฃผ ์˜ค๋ž˜ ์ „์—, iOS์˜ ๋ฐฐํฌ ๊ณผ์ •์ด ๊ถ๊ธˆํ•˜์—ฌ ์•„์ฃผ ๊ฐ„๋‹จํ•œ ์•ฑ์„ ์ถœ์‹œํ•ด ๋ณธ ์ ์ด ์žˆ๋‹ค.

์ตœ๊ทผ ํฌํด ์ •๋ฆฌ๋„ ํ• ๊ฒธ ์• ํ”Œ ๊ฐœ๋ฐœ์ž ๊ณ„์ •์— ๋“ค์–ด๊ฐ”๋Š”๋ฐ, ์ƒ๊ฐ๋ณด๋‹ค ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด ์•ฑ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ๋‹ค.

์ •๋ง ๊ธฐ๋ณธ ์ค‘์— ๊ธฐ๋ณธ์ด์—ˆ๋˜ ์•ฑ์ธ๋ฐ, ์ด๋ ‡๊ฒŒ๋‚˜ ๋งŽ์€ ์‚ฌ์šฉ์ž๊ฐ€ ์žˆ๋‹ค๋‹ˆ,,

(๊ทผ๋ฐ ์•„๋ฌด๋„ ๋ฆฌ๋ทฐ๋ฅผ ๋‹ฌ์ง€ ์•Š์•„ ์•„๋ฌด๋Ÿฐ ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›์ง€ ๋ชปํ•˜๊ณ  ์žˆ๋‹ค๋Š”,,,)

์•„์ง ๋ถ„์„ ๋ถ€๋ถ„์„ ๋ณด๋Š” ๋ฐฉ๋ฒ•๋„ ๋ชจ๋ฅด์ง€๋งŒ.. (ํ‰๊ท  ์œ ์ง€์œจ์ด ๋ฐ์ดํ„ฐ ๋ถ€์กฑ์ด๋ฉด ์•„๋ฌด๋„ ์œ ์ง€ ์•ˆํ•˜๋Š”๊ฑด๊ฐ€ ํ˜น์‹œ)

 

๊ทธ๋ž˜๋„ ๋ˆ„๊ตฐ๊ฐ€ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋‹ˆ

์•„์ง ๊ฐœ๋ฐœ์ž๊ฐ€ ์ด ์•ฑ์— ๊พธ์ค€ํžˆ ์‹œ๊ฐ„์„ ์Ÿ๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์ฃผ๊ณ ์ž,, ์—…๋ฐ์ดํŠธ๋ฅผ ๊ฒฐ์‹ฌํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

์ž์ž ๊ทธ๋Ÿผ ์ด์ œ UserDefaults์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž !!

 

 

UserDefaults ์–ธ์ œ ์‚ฌ์šฉํ•˜๋‚˜?

๋‚˜๋Š”, ํ–…ํ‹ฑ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ–ˆ๋Š”๋ฐ, ํ•ด๋‹น ๊ธฐ๋Šฅ์˜ On, Off๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ–ˆ๋‹ค.

 

UserDefaults์— ๋Œ€ํ•œ ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ๋ด๋ณด์ž

An interface to the user’s defaults database, where you store key-value pairs persistently across launches of your app.
-> ์•ฑ์ด ์‹คํ–‰๋  ๋•Œ๋งˆ๋‹ค ์‚ฌ์šฉ์ž์˜ ๊ธฐ๋ณธ๊ฐ’ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ํ‚ค-๊ฐ’ ์Œ์„ ์ง€์†์ ์œผ๋กœ ์ €์žฅํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ผ๋Š” ๋ง์ด๋‹ค.

 

๋” ์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด, ๋Ÿฐํƒ€์ž„์—์„œ, UserDefaults ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•ฑ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋ณธ๊ฐ’์„ ์‚ฌ์šฉ์ž์˜ ๊ธฐ๋ณธ๊ฐ’ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ฝ์„ ์ˆ˜ ์žˆ๋‹ค. UserDefaults๋Š” ์ด ์ •๋ณด๋ฅผ ์บ์‹œํ•˜์—ฌ ๋งค๋ฒˆ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์—ด์ง€ ์•Š๊ณ ๋„ ๊ธฐ๋ณธ๊ฐ’์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

 

์ด ์™ธ์— ๊ณต์‹ ๋ฌธ์„œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•˜๋ฉด,

1. UserDefaults ํด๋ž˜์Šค๋Š” ์‚ฌ์šฉ์ž์˜ ๊ธฐ๋ณธ๊ฐ’ ์‹œ์Šคํ…œ์„ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

2. ์ด ๊ธฐ๋ณธ๊ฐ’ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•˜๋ฉด ์•ฑ์ด ์‹คํ–‰๋  ๋•Œ ์‚ฌ์šฉ์ž ๊ฐœ์ธ์˜ ์„ ํ˜ธ๋„์— ๋งž๊ฒŒ ์•ฑ์˜ ๋™์ž‘์„ ๋งž์ถœ ์ˆ˜ ์žˆ๋‹ค.

- ์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์šฉ์ž๊ฐ€ ์„ ํ˜ธํ•˜๋Š” ๋‹จ์œ„๋‚˜ ๋ฏธ๋””์–ด ์žฌ์ƒ ์†๋„๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

3. ์•ฑ์€ ์ด๋Ÿฌํ•œ ์„ ํ˜ธ๋„๋ฅผ ์‚ฌ์šฉ์ž์˜ ๊ธฐ๋ณธ๊ฐ’ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•˜์—ฌ, ์•ฑ์ด ์‹œ์ž‘๋  ๋•Œ ๊ธฐ๋ณธ ์ƒํƒœ๋ฅผ ์„ค์ •ํ•˜๊ฑฐ๋‚˜ ์•ฑ์˜ ๊ธฐ๋ณธ ๋™์ž‘์„ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

 

๊ฒฐ๊ตญ! ์‰ฝ๊ฒŒ ๋งํ•ด UserDefaults๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์„ค์ •ํ•œ ์–ธ์–ด, ํ…Œ๋งˆ, ๋งˆ์ง€๋ง‰ ๋กœ๊ทธ์ธ ์ •๋ณด ๋“ฑ์„ ์ €์žฅํ•  ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

 

 

 

UserDefaults๋Š” ์–ด๋””์— ์žˆ๋Š”๊ฑฐ์ฃ ?

๋ฌธ๋“ UserDefaults๋Š” ์–ด๋””์— ์žˆ๊ธธ๋ž˜ ์•ฑ์„ ์•„์˜ˆ ์ข…๋ฃŒํ•˜๊ณ , ๋‹ค์‹œ ๋“ค์–ด์™€๋„ ๊ทธ ๊ฐ’์ด ์ €์žฅ ๋˜๋Š”์ง€ ๊ถ๊ธˆํ–ˆ๋‹ค.

UserDefaults๋Š” ์•ฑ ๋‚ด์—์„œ๋งŒ ์‚ฌ์šฉ๋˜๋ฉฐ, ์‹œ์Šคํ…œ์˜ "๊ธฐ๋ณธ๊ฐ’" ์ €์žฅ์†Œ์— ํ•ด๋‹นํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

์‹ค์ œ๋กœ๋Š” ํ•ด๋‹น ๊ฐ’๋“ค์ด ํŒŒ์ผ ์‹œ์Šคํ…œ์— ์ €์žฅ๋˜๋Š”๋ฐ, ์ด๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์•ฑ ์ƒŒ๋“œ๋ฐ•์Šค ๋‚ด์˜ ํŒŒ์ผ ์‹œ์Šคํ…œ์— ์œ„์น˜ํ•œ๋‹ค.

๊ทธ๋ž˜์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์•ฑ์„ ์žฌ์„ค์น˜ํ•˜๊ฑฐ๋‚˜, ์•ฑ ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ญ์ œ๋˜์ง€ ์•Š๋Š” ํ•œ ๊ฐ’์ด ์œ ์ง€๋œ๋‹ค.

 

 

์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋‚˜์š”?

๊ทธ๋Ÿผ ์ด์ œ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์ •๋ฆฌํ•ด๋ณด์ž.

UserDefaults๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์–‘ํ•œ๋ฐ, ๋‚˜๋Š” JSONEncoder/Decoder ๋ฐฉ์‹์„ ์„ ํƒํ–ˆ๋‹ค.

๋จผ์ € ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌ์กฐ์ฒด ํ˜•ํƒœ๋กœ ์ €์žฅํ•ด์ฃผ์—ˆ๋‹ค. 

Codable ํƒ€์ž…์œผ๋กœ ์ €์žฅํ•˜์—ฌ ์ธ์ฝ”๋”ฉ๊ณผ ๋””์ฝ”๋”ฉ ํ•  ๋•Œ ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜์ด ์‰ฝ๊ฒŒ ์ด๋ฃจ์–ด์ง€๋„๋ก ํ–ˆ๋‹ค.

struct UserInfo: Codable {
    var isAnimation : Bool
    var isHaptic : Bool
}

 

 

๋‹ค์Œ์œผ๋กœ userInfoManager ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•˜์˜€๋‹ค.

์ด ํด๋ž˜์Šค๋Š” UserInfo ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์—ญํ• ์„ ํ•  ๊ฒƒ์ด๋‹ค.

์ฆ‰, UserInfo์— ์žˆ๋Š” ์• ๋‹ˆ๋ฉ”์ด์…˜๊ณผ ํ–…ํ‹ฑ ์„ค์ •์„ UserDefaults๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•ฑ์„ ๋‹ค์‹œ ์‹คํ–‰ํ•ด๋„ ์ด ์„ค์ • ๊ฐ’๋“ค์ด ์œ ์ง€๋˜๋„๋ก ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค.

class userInfoManager {
    static let shared = userInfoManager() // 1๏ธโƒฃ ์‹ฑ๊ธ€ํ†คํŒจํ„ด
    private let key = "userInfo"
    
    var userInfo: UserInfo {
        get {
            if let data = UserDefaults.standard.data(forKey: key), // 2๏ธโƒฃ UserDefaults์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ด
               let decoded = try? JSONDecoder().decode(UserInfo.self, from: data) { // 3๏ธโƒฃ JSONDecoder๋ฅผ ์‚ฌ์šฉํ•ด ๋””์ฝ”๋”ฉ
                return decoded // 4๏ธโƒฃ ๋””์ฝ”๋”ฉ ์„ฑ๊ณตํ•˜๋ฉด ๊ฐ’์„ ๋ฐ˜ํ™˜
            }
            return UserInfo(isAnimation: true, isHaptic: true) // 5๏ธโƒฃ ์ €์žฅ๋œ ๊ฐ’์ด ์—†์œผ๋ฉด ๊ธฐ๋ณธ๊ฐ’ ๋ฐ˜ํ™˜
        }
        set {
            if let encoded = try? JSONEncoder().encode(newValue) { // 6๏ธโƒฃ JSONEncoder๋ฅผ ์‚ฌ์šฉํ•ด ์ธ์ฝ”๋”ฉ
                UserDefaults.standard.set(encoded, forKey: key) // 7๏ธโƒฃ UserDefaults์— ์ €์žฅ
            }
        }
    }
}

 

1. ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด

static let shared = userInfoManager()

์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์„ ์‚ฌ์šฉํ•ด ์•ฑ ์ „์ฒด์—์„œ ๋‹จ ํ•˜๋‚˜์˜ ์ธ์Šคํ„ด์Šค๋งŒ ์กด์žฌํ•˜๊ฒŒ ๋œ๋‹ค. ์ด๋ ‡๊ฒŒ ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์„ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ ‘๊ทผํ•˜๊ณ  ์ˆ˜์ •ํ•  ๋•Œ ์œ ์šฉํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

2. UserDefaults์—์„œ ๋ฐ์ดํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ

UserDefaults.standard.data(forKey: key) ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค.

์ฝ”๋“œ๋ฅผ ์‰ฝ๊ฒŒ ์„ค๋ช…ํ•ด๋ณด๋ฉด,

 

  • UserDefaults๋ž€?
    • UserDefaults๋Š” ๊ฐ„๋‹จํ•œ ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ๋กœ, ์•ฑ์„ ์ข…๋ฃŒํ•˜๊ณ  ๋‹ค์‹œ ์‹คํ–‰ํ•ด๋„ ๋ฐ์ดํ„ฐ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค. 
  • forKey: key๋ž€?
    • forKey: key๋Š” ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ์„ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์‹๋ณ„์ž์ด๋‹ค.
    • ๋ฐ์ดํ„ฐ๋Š” key๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ์ €์žฅ๋˜๊ณ , ์ด ์ด๋ฆ„์„ ํ†ตํ•ด ๋‚˜์ค‘์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.
  • data(forKey:)๋ž€?
    • data(forKey:)๋Š” UserDefaults์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ”์ดํŠธ ๋ฐฐ์—ด ํ˜•์‹์œผ๋กœ ๊ฐ€์ ธ์˜จ๋‹ค.
    • ์ด ๋ฐ์ดํ„ฐ๋Š” ์šฐ๋ฆฌ๊ฐ€ ์›ํ•˜๋Š” ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜ํ•ด์•ผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด, UserDefaults์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ UserInfo ๊ตฌ์กฐ์ฒด๋ผ๋ฉด, ์ด๋ฅผ JSONDecoder๋กœ ๋””์ฝ”๋”ฉํ•˜์—ฌ UserInfo ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•ด์•ผ ํ•œ๋‹ค.

3~6. UserDefaults ์— ์žˆ๋Š” ์ •๋ณด ์ธ์ฝ”๋”ฉ, ๋””์ฝ”๋”ฉ ํ•˜๊ธฐ

 

์œ„ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด ๋””์ฝ”๋”ฉ๊ณผ ์ธ์ฝ”๋”ฉ ๊ณผ์ •์ด ์žˆ๋‹ค.

ํฌ๊ฒŒ get๊ณผ set์œผ๋กœ ๋‚˜๋‰˜๋Š”๋ฐ, UserDefaults๋Š” Bool, Int, Double, String, Data, Array, Dictionary ๊ฐ™์€ ๊ธฐ๋ณธ ํƒ€์ž…๋งŒ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ ์œ„์—์„œ ์ •์˜ํ•œ UserInfo๋Š” ๊ตฌ์กฐ์ฒด์ด๋ฏ€๋กœ ๊ทธ๋Œ€๋กœ ์ €์žฅํ•  ์ˆ˜ ์—†๋‹ค.

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— JSONEncoder๋กœ ๋ณ€ํ™˜(์ธ์ฝ”๋”ฉ)ํ•˜๊ณ , ๋‹ค์‹œ ๋ถˆ๋Ÿฌ์˜ฌ ๋•Œ JSONDecoder๋กœ ๋ณ€ํ™˜(๋””์ฝ”๋”ฉ)ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

7. UserDefaults์— ์ •๋ณด ์ €์žฅํ•˜๊ธฐ

UserDefaults.standard.set(encoded, forKey: key)

์ •๋ณด๋ฅผ ์ €์žฅํ•  ๋•Œ๋Š” setํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ •๋ณด๋ฅผ ์ €์žฅํ•œ๋‹ค.

์ด ๋•Œ, nil ๊ฐ’์„ ์ €์žฅํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด, ์ด๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ง€์šฐ๋Š” ๊ฒƒ๊ณผ ๊ฐ™๋‹ค๊ณ  ํ•œ๋‹ค.

์ฆ‰, ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•˜๋ ค๋ฉด, nil์„ ๋„ฃ์–ด์ฃผ๋ฉด๋œ๋‹ค !

 

 

์ „์ฒด ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

 

์ „์ฒด ์ฝ”๋“œ

struct UserInfo: Codable {
    var isAnimation : Bool
    var isHaptic : Bool
}

class userInfoManager {
    static let shared = userInfoManager() // 1๏ธโƒฃ ์‹ฑ๊ธ€ํ†คํŒจํ„ด
    private let key = "userInfo"
    
    var userInfo: UserInfo {
        get {
            if let data = UserDefaults.standard.data(forKey: key), // 2๏ธโƒฃ UserDefaults์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ด
               let decoded = try? JSONDecoder().decode(UserInfo.self, from: data) { // 3๏ธโƒฃ JSONDecoder๋ฅผ ์‚ฌ์šฉํ•ด ๋””์ฝ”๋”ฉ
                return decoded // 4๏ธโƒฃ ๋””์ฝ”๋”ฉ ์„ฑ๊ณตํ•˜๋ฉด ๊ฐ’์„ ๋ฐ˜ํ™˜
            }
            return UserInfo(isAnimation: true, isHaptic: true) // 5๏ธโƒฃ ์ €์žฅ๋œ ๊ฐ’์ด ์—†์œผ๋ฉด ๊ธฐ๋ณธ๊ฐ’ ๋ฐ˜ํ™˜
        }
        set {
            if let encoded = try? JSONEncoder().encode(newValue) { // 6๏ธโƒฃ JSONEncoder๋ฅผ ์‚ฌ์šฉํ•ด ์ธ์ฝ”๋”ฉ
                UserDefaults.standard.set(encoded, forKey: key) // 7๏ธโƒฃ UserDefaults์— ์ €์žฅ
            }
        }
    }
}

 

 

์ด๋ ‡๊ฒŒ UserDefaults๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ์„ค์ •ํ•œ ๋‚ด์šฉ์„ ์ €์žฅํ•ด๋ณด์•˜๋‹ค.

UserDefaults๋ฅผ ์‚ฌ์šฉํ•˜๋‹ˆ ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด์„ ์จ์„œ ์•„๋ฌด๊ณณ์—์„œ๋‚˜ ํ•„์š”ํ•  ๋•Œ ๋ถˆ๋Ÿฌ์˜ค๊ณ , ์—…๋ฐ์ดํŠธ ํ•  ์ˆ˜ ์žˆ์–ด ํŽธ๋ฆฌํ–ˆ๋‹ค.

 

 

๋‹ค๋ฅธ ๋ทฐ์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ

let savedUser = UserInfoManager.shared.userInfo
if savedUser.isHaptic == true {
    HapticManager.shared.hapticImpact(style: UIImpactFeedbackGenerator.FeedbackStyle.light)
}

์ด๋Ÿฐ์‹์œผ๋กœ savedUser ๋ณ€์ˆ˜์— ์ €์žฅ๋ผ ์žˆ๋Š” ์ •๋ณด๋ฅผ ๋‹ค์‹œ ์ €์žฅํ•˜๊ณ , ํ•ด๋‹น ๋‚ด์šฉ์ด true๋กœ ์„ค์ •๋˜์–ด ์žˆ์œผ๋ฉด ๊ทธ์— ๋งž๋Š” ํ–…ํ‹ฑ์„ ์ฃผ์—ˆ๋‹ค.

toggleSwitch.isOn = savedUserInfo.isAnimation

๊ทธ๋ฆฌ๊ณ , ๋งŒ์•ฝ ์‚ฌ์šฉ์ž๊ฐ€ ์„ค์ •์„ ๋ฐ”๊พธ๋ฉด ๋ฐ”๋€ ๋‚ด์šฉ์„ ๋‹ค์‹œ UserDefaults์— ์—…๋ฐ์ดํŠธ ํ•ด์ฃผ์—ˆ๋‹ค.

 

 

์ง€๊ธˆ๊นŒ์ง€ ์ž˜ ์•Œ์ง€๋„ ๋ชปํ•˜๋ฉด์„œ UserDefaults์— ๋ƒ…๋‹ค ์ €์žฅํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ๋ถˆ๋Ÿฌ์˜ค๊ณค ํ–ˆ์—ˆ๋Š”๋ฐ ์ด์ œ์•ผ ์ œ๋Œ€๋กœ ์•Œ๊ฒŒ๋๋‹ค.

์‹œ๊ฐ„์€ ๊ฝค ๊ฑธ๋ ธ์ง€๋งŒ, ๊ทธ๋ž˜๋„ ์•Œ๊ณ  ๋‚˜๋‹ˆ ๋” ์ž˜ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค !

 

 

728x90
๋ฐ˜์‘ํ˜•