์์ ํ๋ก์ ํธ๋ค์ ๋งค์ผ ํ๋์ฉ ๋ง๋ค๋ฉด์,
UserDefaults๋ก ์ฑ์ด ์ข
๋ฃ๋์ด๋ ๋ฐ์ดํฐ๊ฐ ๋จ์์์ ์ ์๋๋ก
๊ณ์ ์ ์ฅ ๊ธฐ๋ฅ์ ์ถ๊ฐํด๋ณด๋ ค๊ณ ํ์ต๋๋ค.ใ
ใ
์์ง ์ต์ํ์ง๋ ์์ง๋ง,
์ ๋ฆฌํ๋ฉด์ ํ์คํ ๊ธฐ์ตํด๋ณด๋ ค๊ณ ํฉ๋๋ค!โบ๏ธ
UserDefaults๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์ฌ๋ฌ ๋ฐฉ์ ์ค ํ๋์
๋๋ค.
๊ทธ ์ค UserDefaults๋ ๋จ์ผ ๋ฐ์ดํฐ ๊ฐ(๊ฒฝ๋)์ ์ ์ฅํ๋๋ฐ ์ฃผ๋ก ์ฌ์ฉํฉ๋๋ค!
์๋ฅผ ๋ค๋ฉด,
์๋ ๋ก๊ทธ์ธ ์ฌ๋ถ, ์๋ฆผ ์์ ์ฌ๋ถ, ๊ฒฐ์ ์ฌ๋ถ, ์ด๋ฉ์ผ, ๋๋ค์ ๋ฑ ์ฌ์ฉ์ ๊ธฐ๋ณธ ์ค์ ์ ๋ํ ๋ฐ์ดํฐ๋ค์ด ์์ต๋๋ค.
์ด๋ฌํ ๋ฐ์ดํฐ๋ค์ iOS ๋๋ฐ์ด์ค ๊ธฐ๊ธฐ์ ์ ์ฅ๋๊ณ , ์ฑ์ ์ญ์ ํ๊ฒ ๋๋ฉด ๋ฐ์ดํฐ๋ค๋ ํจ๊ป ์ญ์ ๋ฉ๋๋ค.
์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง ๊ฐ๋จํ ์์๋ฅผ ํตํด ์ ๋ฆฌํด๋ณด๊ฒ ์ต๋๋ค!
๋จผ์ ! Storyboard์์
textField, Button, Label 2๊ฐ๋ฅผ ๋ฐฐ์นํด์ฃผ๊ณ ,
textField์ Label 2๊ฐ๋ outlet ์ฐ๊ฒฐ์ ํด์คฌ์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ button์ IBAction์ ์ฐ๊ฒฐํด์ฃผ๊ณ ,
textField์ text๋ฅผ ์
๋ ฅํ๊ณ ์ ์ฅ ๋ฒํผ์ ๋๋ฅด๋ฉด, (ํฐ์ - titleLabel)์ ๋์ฌ ์ ์๋๋ก ํด๋ณด๊ฒ ์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ ์ฅํ ๋ฐ์ดํฐ๋ (๋ถํ - saveLabel)์ ๋ณด์ฌ์ง๋๋ก ํ๋ ค๊ณ ํฉ๋๋ค.
import UIKit
class ViewController: UIViewController {
@IBOutlet var inputTextField: UITextField!
@IBOutlet var titleLabel: UILabel!
@IBOutlet var saveLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
}
}
@IBAction func saveButtonClicked(_ sender: UIButton) {
guard let something = inputTextField.text else { return }
titleLabel.text = something
inputTextField.text = ""
}
}
๊ทผ๋ฐ, ์ด๋ ๊ฒ ์
๋ ฅ์ ํด๋์๋
์ด๋๋ก ์ฑ์ ์ข
๋ฃํ๋ฉด, ์ ํ๋ฉด ๊ทธ๋๋ก ๋จ์์์ง ์์ต๋๋ค.
UserDefaults๋ฅผ ์ฌ์ฉํด์ ์ฑ์ ์ข
๋ฃํ๋๋ผ๋
(ํฐ์ - titleLabel)์ ์๋ ๋ด์ฉ์
(๋ถํ - saveLabel)์ ์ ์ฅ ๋ฆฌ์คํธ๊ฐ ๋ฐ ์ ์๋๋ก ์ ์ฅํด๋ณด๊ฒ ์ต๋๋ค!
1. UserDefaults์ ๋ฐ์ดํฐ ์ ์ฅํ๊ธฐ
UserDefaults.standard.setValue
or
UserDefaults.standard.set
๋ ๋ค ์ฌ์ฉ ๊ฐ๋ฅํ๋ฉฐ!
value ๋งค๊ฐ๋ณ์์ Integer, Double, String ๋ฑ ๋ค์ํ ํ์
์ด ์์ต๋๋ค.
์ ์ฅํ ๋๋
์ด๋ค ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๊ฑด์ง, key๊ฐ์ ๋ฌด์์ผ๋ก ํ ๊ฒ์ธ์ง!
์ด ๋๊ฐ์ง๋ง ๋ช
ํํ๊ฒ ์
๋ ฅํ๋ฉด ๋ฉ๋๋ค.
2. UserDefaults์์ ์ ์ฅํ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ
๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ๋๋ ์ ํ๋ฉด๊ณผ ๊ฐ์ด ๋ช
ํํ ํ์
์ ์ ํด์ค์ผํฉ๋๋ค.
(object, string, bool, integer, ๋ฑ๋ฑ ...)
๊ทธ๋ฆฌ๊ณ , ์ ์ฅํ ๋ ์ฌ์ฉ์๊ฐ ์
๋ ฅํ๋ key๊ฐ๊ณผ ๋์ํ๋ ๊ฐ์ด ์์ ์ ์์ผ๋
๋ฐํ๊ฐ์ด ์ต์
๋(Optional)์
๋๋ค.
์ต์
๋์ด ์๋ ๊ฒฝ์ฐ๋ ์์ต๋๋ค.
(Bool, Integer, Double)
์ด๋ฌํ ๊ฒฝ์ฐ์๋ ๊ธฐ๋ณธ๊ฐ์ผ๋ก
Bool์ false, Integer์ Double์ 0์ผ๋ก ๋ฐํํฉ๋๋ค.
๊ทธ๋ผ ๋ค์ ์ด์ด์ ์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํด์
textField์ ์
๋ ฅํ๋ ๊ฐ๋ค์ ์ ์ฅํด๋ณด๊ฒ ์ต๋๋ค.โบ๏ธ
var someArray: [String] = []
๊ฐ์ ์ ์ฅํ 'someArray'๋ผ๋ ๋ฐฐ์ด์ ๋ง๋ค๊ฒ ์ต๋๋ค.
๊ทธ ๋ค์!
์ ์ฅ ๋ฒํผ์ ๋๋ ์ ๋!!
textField์ ์ ์ text๊ฐ someArray์ ์ถ๊ฐ๋๋๋ก ํ๊ฒ ์ต๋๋ค.
@IBAction func saveButtonClicked(_ sender: UIButton) {
guard let something = inputTextField.text else { return }
someArray.append(something)
titleLabel.text = something
inputTextField.text = ""
}
someArray.append(something)
์ด ํ ์ค๋ง ์ถ๊ฐํ๋ฉด ๋๊ฒ ์ฃ ?
๊ทธ ๋ค์! UserDefaults ์ ์ฅํ๋ ๋ฉ์๋ ํ ์ค๋ง ์์ฑํ๋ฉด ๋ฉ๋๋ค!
UserDefaults.standard.setValue(someArray, forKey: "something")
" 'someArray'๋ฅผ ์ ์ฅํ ๊ฑฐ๊ณ ,
๊ทธ ์ ์ฅํ ๊ณณ ์ด๋ฆ์ 'something'์ด๋ผ๊ณ ๋ถ๋ฅผ๊ฒ!"
์ด๋ ๊ฒ ์๊ฐํ๋ฉด ๋ฉ๋๋ค.
์ด์ ์ ์ฅํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
์ฑ์ ์ข
๋ฃํ๋ค๊ฐ ์ ์ฅํ ๋ฐ์ดํฐ๊ฐ ๊ทธ๋๋ก ๋ณด์ฌ์ง๋ ค๋ฉด,
viewDidLoad์์ ๋ณด์ฌ์คํฉ๋๋ค.
์ฑ์ด ์ฒ์ ์์๋ ๋, ์ต์ด๋ก ๋ฑ ํ ๋ฒ๋ง ์คํ๋๋ ๊ณณ์ด๊ธฐ ๋๋ฌธ์
๋๋ค!
override func viewDidLoad() {
super.viewDidLoad()
let a = UserDefaults.standard.array(forKey: "something")
if let array = a as? [String] {
someArray = array
saveLabel.text = "\(array)"
}
}
์ ๋ ์ด๋ ๊ฒ ํ ๋ฒ ์์ฑํด๋ดค์ต๋๋ค.
๋ฐ์ดํฐ๋ฅผ ๋ฐฐ์ด๋ก ๊ฐ์ง๊ณ ์ฌ ๊ฒ์ด๊ธฐ ๋๋ฌธ์, array(forKey:)๋ฅผ ์ฌ์ฉํด์คฌ์ต๋๋ค.
a๋ ์ต์
๋ Any ํ์
์
๋๋ค.
Stirng ๋ฐฐ์ด ํ์
์ธ SomeArray์ ๋ฃ์ด์ฃผ์ด์ผํ๊ธฐ ๋๋ฌธ์
if let์ ์ฌ์ฉํด์คฌ์ต๋๋ค.
" 'something'์ด๋ผ๋ ์ด๋ฆ์ผ๋ก ์ ์ฅํ ๋ฐ์ดํฐ ๊ฐ์ ธ์์ ๊ทธ ๋ฐ์ดํฐ๋ฅผ 'a'์ ๋ฃ์๊ฑด๋ฐ,
๋ง์ฝ ๊ทธ๊ฒ [String] ํ์
์ด ์๋๋ฉด nil๋ก ์ฒ๋ฆฌํ๊ณ , ๋ง์ผ๋ฉด array๋ผ๊ณ ๋ถ๋ฅผ๊ฑฐ๋ค.
๊ทธ๋ฆฌ๊ณ ๊ทธ ๊ฐ์ ธ์จ array๋ฅผ someArray๋ผ๋ ๋ฐฐ์ด(์ ์ฅ ๊ณต๊ฐ)์ ๋ฃ์๊ฑฐ๋ค!"
์ด๋ ๊ฒ ์ ์ฅํ ๋ฐ์ดํฐ๋ฅผ someArray์ ์ด๊ธฐํ ํ์ผ๋,
saveLabel์ ๋ฐ ์ ์๋๋ก ํด์ฃผ๋ฉด ๋์
๋๋ค! :-)
์ด๋ ๊ฒ textField์ ์
๋ ฅํ๊ณ , ์ ์ฅ ๋ฒํผ์ ๋๋ฌ์ฃผ๋ฉด!
์
๋ ฅํ๋ ๋ฌธ๊ตฌ๋ค์ด ์ฑ์ ์ข
๋ฃํ๋ค๊ฐ ๋ค์ ์คํํด๋ ๋จ์์๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค.
๋ค์ ๊ฒ์๊ธ์์๋
๊ตฌ์กฐ์ฒด(struct)๋ฅผ UserDefaults๋ก ์ ์ฅํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ์ ๋ฆฌํด๋ณด๊ฒ ์ต๋๋ค!
โบ๏ธํผ๋๋ฐฑ์ด ์๋ค๋ฉด, ๋๊ธ ๋จ๊ฒจ์ฃผ์ธ์โบ๏ธ
'Swift > Xcode' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Swift] View Drawing Cycle (0) | 2024.05.28 |
---|---|
[Swift] Delegate ํจํด (0) | 2024.05.26 |
[Swift] tag ํ์ฉํ์ฌ ์ฝ๋ ๊ฐ์ํํ๊ธฐ (0) | 2024.05.20 |
[Swift] ํจ์์ ๋งค๊ฐ๋ณ์๋ฅผ ํ์ฉํด์ ์ฝ๋ ๊ฐ์ ํ๊ธฐ (0) | 2024.05.20 |
[Swift] Storyboard ์ฌ์ฉ ์ Outlet ์ด๋ฆ ๋ณ๊ฒฝ ๋ฐฉ๋ฒ (0) | 2024.05.16 |