ํ๊ทธ ์ฌ์ฉํ๊ธฐ
์ฝ๋๋ก ํ๊ทธ ์ง์ ํ๋ ๋ฐฉ๋ฒ
ํ ์คํธํ๋ IBAction ์ฐ๊ฒฐ ์ ์ฃผ์์ฌํญ
์์ ์ฒซ๋ฒ์งธ ํ ์คํธ ํ๋์์ ๋์ด๋ค๊ฐ Did End On Exit ์ด๋ฒคํธ๋ก ์ค์ ํด์ IBAction ํจ์ ๋ง๋ค์๋๋ผ๋
๋๋ฒ์งธ ํ ์คํธ ํ๋์ ์ฌ์ง์ฒ๋ผ ๋์ด๋ค ๋ฃ์ด์ฃผ๋ฉด default ์ก์ ์ธ Editing Did End ๋ก ์ค์ ๋จ. ์ธ์คํํฐ์์ ์ํ๋ ์ก์ ์ผ๋ก ์์ ํด์ฃผ๋์ง ์ธ์คํํฐ์์ ๋์ด๋ค ์ฐ๊ฒฐ
guard ๋ฌธ
guard ๋ฌธ์ ์์ธ์ฒ๋ฆฌ๊ฐ ์๋์ชฝ ์๋ ์ฝ๋์์ชฝ์์ ์ผ์ด๋จ.
guard ๋ฌธ์ return ์ ํด์ฃผ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ค๋ฅ๋จ.
ํ๊ทธ๊ฐ ์ด๊ฑฐํ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ
- ํ ์คํธ ํ๋ ๋ค์ ์ธ ํ๊ทธ ๊ฐ๋ค ์ด๊ฑฐํ rawValue์ ๋ฏธ๋ฆฌ ์ง์
enum TextFieldType: Int {
case id = 100
case email = 200
case password = 300
}
- ์ก์ ํจ์ ์คํ ์ ํ๊ทธ ๊ฐ์ ๋ฐ๋ผ ์ด๊ฑฐํ ๊ฐ๊ณผ ๋น๊ตํ์ฌ ์ฒ๋ฆฌ
@IBAction func textFieldKeyboardTapped(_ sender: UITextField) {
guard let text = sender.text else {
print("์์ด๋๊ฐ ์
๋ ฅ๋์ง ์์์ต๋๋ค.")
return
}
switch sender.tag {
case TextFieldType.id.rawValue : print("์์ด๋๋ \(idTextField.text!) ์
๋๋ค.")
case TextFieldType.email.rawValue : print("์ด๋ฉ์ผ์ \(emailTextField.text!) ์
๋๋ค.")
case TextFieldType.password.rawValue : print("๋น๋ฐ๋ฒํธ๋ \(passwordTextfield.text!)")
default: print("์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค.")//์์ธ์ฒ๋ฆฌ
}
}
์์ default ์์ธ์ฒ๋ฆฌ ๋ถ๋ถ guard ๋ฌธ์ผ๋ก ํ๋ ๋ฒ
@IBAction func textFieldKeyboardTapped(_ sender: UITextField) {
guard let text = sender.text else {
print("์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค.")
return
}
//rawValue ์ด์ฉํด์ ๋ค์ด์จ ์ก์
์ sender.tag๊ฐ TextFieldType ์ด๊ฑฐํ์ ์๋ ๊ฐ์ธ์ง ํ์ธ //์๋ ๊ฐ์ด๋ฉด ์ค๋ฅ ๋ฐ์ ์๋ ๊ฐ์ด๋ฉด ์ด๋ค guard let textFieldCase = TextFieldType(rawValue: sender.tag) else { print("์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค.") return } //case๋ฌธ์ default ์ ๋ฃ์ด์ค๋ ์ค๋ฅ ์ ๋๊ฒ ๋จ. //์์์ ๊บผ๋ธ value ๊ฐ์ ๋ฐ๋ฅธ ์กฐ๊ฑด๋ฌธ ์ฒ๋ฆฌ switch textFieldCase { case .id : print("์์ด๋๋ \(text) ์
๋๋ค.") case .email : print("์ด๋ฉ์ผ์ \(text) ์
๋๋ค.") case .password : print("๋น๋ฐ๋ฒํธ๋ \(text)") } }
let textFieldCase = TextFieldType(rawValue: 0)
- ์ธ์๋ก ๋ค์ด ์จ ์ซ์๋ฅผ rawvalue๋ก ๊ฐ์ง๋ ์ด๊ฑฐํ์ผ์ด์ค ๊ฐ์ ๋ฐํ ํจ
guard ๋ฌธ ๋ ๋ฒ ์ฐ๋๊ฑฐ ํ๋ฒ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ
guard let text = sender.text, let value = TextFieldType(rawValue: sender.tag) else {
print("์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค.")
return
}
Saving Data
์ฑ์ ์ค์นํ๋ฉด ์์ดํฐ ์ ์ฅ๊ณต๊ฐ์ ์ฌ์ฉํ๊ฒ ๋จ. (์ค์ - ์ผ๋ฐ - ์ ๋ณด - ์ฌ์ฉ๊ฐ๋ฅ ๊ณต๊ฐ)
์ฑ๋ค์ ๋ณดํต ๋ฐฑ์ /๋ณต๊ตฌ ๊ธฐ๋ฅ ๊ตฌํ๋์ด์์.
UserDefaults
๋จ์ผ ๋ฐ์ดํฐ ๊ฐ (๊ฒฝ๋)
DataBase
์ ์ฌํ ๋๋ ๋ฐ์ดํฐ ๊ฐ (์ค๋)
๊ฐ๋ฐ์๋ ์๊ธฐ์ฑ ๋ฐ์ดํฐ๊ฐ ์ ํํ ์ด๋ ์ ์ฅ๋๋์ง ์ ์ ์์. ์ ๋์ ์ผ๋ก ๋ณํํจ
→์ด ๋ถ๋ถ์ ์ ํ์ด ๋์์ค : Sandbox
UserDefaults
์ ์ฅํ๊ธฐ
@IBAction func saveButtonClicked(_ sender: Any) {
UserDefaults.standard.set(idTextField.text!, forKey: "id")
UserDefaults.standard.set(emailTextField.text!, forKey: "email")
UserDefaults.standard.set(passwordTextfield.text!, forKey: "name")
}
๋ถ๋ฌ์ค๊ธฐ
override func viewDidLoad() {
let name = UserDefaults.standard.string(forKey: "id")
let email = UserDefaults.standard.string(forKey: "email")
let password = UserDefaults.standard.string(forKey: "password")
if let name {
idTextField.text = name
}
if let email {
emailTextField.text = email
}
if let password {
passwordTextfield.text = password
}
}
ํ์ ๋ณ UserDefaults
string๋ง ์ต์ ๋(String?)์ด๋ผ nil๊ฐ ๊ฐ์ง.
integer,bool์ Int,Bool
Class
- ํด๋์ค์ ๊ฐ์ฅ ํฐ ํน์ง → ์์
- Base Class: ํ์ด๋ก ์๋ฌด๊ฒ๋ ์์ ๋ฐ๊ณ ์์ง ์์ ํด๋์ค
- override : ๋ถ๋ชจํด๋์ค๋ก๋ถํฐ ๋ฌผ๋ ค๋ฐ์ ์์๋ฅผ ์์ํด๋์ค์์ ์ฌ์ฉํ ๋, ์์ํด๋์ค๋ง์ ๊ธฐ๋ฅ์ผ๋ก ๋ณ๊ฒฝํด์ ์ฌ์ฉํ ์ ์๋ค.
- super.viewDidLoad() ์ฃผ์ ์ฒ๋ฆฌํด๋ ๋น์ฅ ๋ฌธ์ ๊ฐ ์๊ธฐ์ง ์๋๋ผ๋ ์ธ์ ๊ฐ ๋ฌธ์ ๊ฐ ์๊ธธ ์ ์์.
- ํด๋์ค ๋ด ๋ชจ๋ ํ๋กํผํฐ๋ ์ด๊ธฐํ๊ฐ ๋์ด ์์ด์ผ ํ๋ค. → but ์ต์ ๋ ํ์ ์ผ๋ก ํด ๋์ผ๋ฉด nil์ด ๋ค์ด๊ฐ์ ์ค๋ฅ ์ ๋จ. ํ์ง๋ง ๋น์ฅ ํด๊ฒฐ์ด ๋๋ค ํ๋๋ผ๋ ๋์ค์ ์ต์ ๋ ์ฒ๋ฆฌํด์ค์ผํ๋ ๊ฒ์ด ๋ถํธํ๋ฏ๋ก ์ฌ์ฉ ์์
- ํด๋์ค ๋ด๋ถ์ ์ ์ธ๋ ๋ณ์๋ฅผ ํ๋กํผํฐ, ํจ์๋ฅผ ๋ฉ์๋๋ผ๊ณ ๋ถ๋ฅธ๋ค.
- iOS UIKit ํ๋ ์์ํฌ ๋๋ถ๋ถ ํด๋์ค
- ์ ์ธ๊ณผ ๋์์ ์ด๊ธฐํ๋ฅผ ์งํํ๊ธฐ
- ์ต์ ๋๋ก ์ ์ธํ๊ธฐ
- ๋งค๊ฐ๋ณ์. ์ด๊ธฐํ ๊ตฌ๋ฌธ ๋ง๋ค๊ธฐ
๋ณ์ ์ ์ธํ ๋ ์ด๊ธฐํ ์ํ๋ฉด ์ค๋ฅ๋จ
but ์ต์ ๋ ํ์ ์ผ๋ก ํด ๋์ผ๋ฉด nil์ด ๋ค์ด๊ฐ์ ์ค๋ฅ ์ ๋จ. ํ์ง๋ง ๋น์ฅ ํด๊ฒฐ์ด ๋๋ค ํ๋๋ผ๋ ๋์ค์ ์ต์ ๋ ์ฒ๋ฆฌํด์ค์ผํ๋ ๊ฒ์ด ๋ถํธํจ
๋์ ์ initializer ๋ฐ๋ก ๋ง๋ค๋ฉด ๋จ. ์์ฑ ๋ ๋ ๋ฌด์กฐ๊ฑด ๊ฐ์ด ๋ค์ด๊ฐ ๊ฒ ์ด๊ธฐ ๋๋ฌธ
self ์จ์ค์ผ ์ค๋ฅ ์๋จ .
Struct
- Swift์ Data Type๊ณผ ์ด๊ฑฐํ→Struct
์ด๊ธฐํ ์ํ๊ณ ์ ์ธ๋ง ํ๊ณ ์์ฑ์ ์์ด๋ ์ค๋ฅ ์ ๋จ
๋ฉค๋ฒ์์ด์ฆ ์ด๋์ ๋ผ์ด์ ๊ตฌ๋ฌธ ์ ๊ณต - ์๋์ผ๋ก ์ด๋์ ๋ผ์ด์ ์๊น
๋ง์ฝ์ ์ด๊ธฐํ ๋์ด์๋ ํ๋กํผํฐ๋ค ์์ผ๋ฉด ๊ฑ๋ค๋ค๋ง ์ด๋์ ๋ผ์ด์ ์ ํฌํจ ๋จ.
์ฑ์ฉ๊ณผ์ ์์ struct ์ธ๋ฐ ํด๋์ค์ฒ๋ผ init ํจ์ ๊ตฌํํด ๋์ผ๋ฉด ๊ธฐ๋ณธ์ ์ธ ๊ฒ์ ๋ชจ๋ฅธ๋ค๊ณ ์๊ฐ ํ ์๋ .
- nickname๊ณผ subNickname ์ ๊ฐ๊ฐ ๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ ์ ์ฅ ๋์ด์์ด์ ์๋ก ์ํฅ์ ์ฃผ์ง ์์ .
Class
์๋ก ์๊ธด baby์ secondBaby ๋ ๊ฐ์ ๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฐจ์งํ์ง๋ง ๊ทธ ๋ฉ๋ชจ๋ฆฌ์์ ์จ์๋๊ฒ ํด๋์ค ๊ฐ ์์ฒด๊ฐ ์๋๋ผ ๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ(ํด๋์ค์ ๊ฐ๋ค์ด ๋ค์ด์๋ ๊ณณ)์ ์ฃผ์๊ฐ์ด ๋๊ฐ์ด ๋ค์ด๊ฐ ์์.
→ ๊ฐ์ ๊ฐ์ ์ฐธ์กฐํ๊ณ ์์ผ๋ฏ๋ก ์๋ก ์ํฅ ์ค.
Struct
let์ผ๋ก ์ ์ธ์ ์ธ์คํด์ค ๋ด๋ถ์ ํ๋กํผํฐ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ค.
'SeSAC' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[iOS] TIL_230728 (0) | 2023.08.01 |
---|---|
[iOS] TIL_230727 (0) | 2023.07.31 |
[iOS] TIL_230725 (0) | 2023.07.30 |
[iOS] TIL_230719 (0) | 2023.07.25 |
[iOS] TIL_230718 (0) | 2023.07.20 |