๋ค์ด๊ฐ๋ฉฐ
โ๏ธ ๊ธฐ์ด ๋ฌธ๋ฒ ๊ณต๋ถ์ ํ์์ฑ์ ๋๊ปด์ ์ด์ฌ์ผ๋ก ๋์๊ฐ ์กฐ๊ธ์ฉ ๊ณต๋ถํ๋ ค๊ณ ํ๋ค. ์ง๊ธ ๊ณต๋ถํ๊ณ ์ ํ๋ ๊ฒ๋ค์ด ๋จ์ ์ ๋ฆฌ๊ฐ ๋์ง ์๋๋ก ๊ณ์ ๊ณ ๋ฏผํ๊ณ ์ฐ๊ตฌํ๋ ์์ธ๋ฅผ ๊ฐ์ง๋๋ก ํ์. ๊ธฐ์ด๋ ๊ฐ์ฅ ์ฌ์์๊ฐ ์๋๋ผ ๊ฐ์ฅ ์ค์ํด์ ๊ทธ ์๋ฏธ๊ฐ ์์์ ๊นจ๋ซ์.
if๋ฌธ
๐๐ปโ๏ธ ํน์ ์กฐ๊ฑด์์๋ง ์ฝ๋๋ฅผ ์คํํด์ผ ํ๊ฑฐ๋ ๋๋ ์คํํ์ง ๋ง์์ผ ํ๊ฑฐ๋ ํ๋ ์ํฉ์์ ์ฐ์ธ๋ค. ๋ง ๊ทธ๋๋ก ์กฐ๊ฑด์ ๋ฐ๋ผ ๋ค๋ฅธ ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ๊ณ ์ถ์ ๋ ์ฌ์ฉํ๋ค. ํ๋์ ํ๋ก๊ทธ๋จ์ ๋ง๋ค๋ค ๋ณด๋ฉด ์ ๋ง ํ์์ ์ผ๋ก ์กฐ๊ฑด๋ฌธ์ ์ฌ์ฉํด์ ์กฐ๊ฑด์ ๋ฐ๋ฅธ ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ๋ ์ํฉ์ด ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ ํ์์ ์ผ๋ก ์๊ณ ์์ด์ผ ํ๋ ๋ด์ฉ์ด๋ค.
์ค์ํ ๊ฑด if๋ฌธ์ ์ฌ์ฉํ ์ ์๋ ์ํฉ์์ switch-case๋ฌธ์ ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์ธ๋ฐ ์ด๋ป๊ฒ ์ฝ๋๋ฅผ ์์ฑํด์ผ ํ ์ง๋ ์ ์ ํ ํ๋จ์ด ํ์ํ๋ค.
โ ์กฐ๊ฑด์ ๋ฐ๋ฅธ ํ์๋ฅผ ์ฒ๋ฆฌํ ๋ ๊ธฐ๋ณธ์ด ๋๋ ๊ตฌ๋ฌธ์ด๋ค.
โ ํน์ ์กฐ๊ฑด์ ๋ง์กฑํ๊ฑฐ๋ ๋ง์กฑํ์ง ์๋ ์ํฉ์์ ๋ฌด์ธ๊ฐ๋ฅผ ํด์ผํ ๋ ์ฌ์ฉํ๋ค.
โ if๋ฌธ์ผ๋ก ์ฐ์ผ ์ ์๋ ์ฝ๋๋ฅผ switch-case๋ก๋ ์์ฑํ ์ ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๋ฐ ์ ์ ํ ํ๋จ์ด ํ์ํ๋ค.
์ฝ๋ ์์ : [์ถ์ฒ] ๊ฐ๋ฐํ๋ ์ ๋๋ฆฌ ์ธํ๋ฐ ๊ฐ์
// ๊ฐ์ฅ Basicํ if ~ else ์กฐ๊ฑด๋ฌธ์ ํํ
import UIKit
var isDarkMode: Bool = true
// 1
if (isDarkMode == true) {
print("๋คํฌ๋ชจ๋ ์
๋๋ค.")
} else {
print("๋คํฌ๋ชจ๋๊ฐ ์๋๋๋ค.")
}
// 2
if (isDarkMode == true) {
print("๋คํฌ๋ชจ๋ ์
๋๋ค.")
} else {
print("๋คํฌ๋ชจ๋๊ฐ ์๋๋๋ค.")
}
// 3
if isDarkMode {
print("๋คํฌ๋ชจ๋ ์
๋๋ค.")
} else {
print("๋คํฌ๋ชจ๋๊ฐ ์๋๋๋ค.")
}
// ๊ฐ์ธ์ ์ผ๋ก 3๋ฒ์ ํํ๊ฐ ๊ฐ์ฅ ๊น๋ํ์ง ์๋ ์๊ฐํ๋ค.
// Boolean ๊ฐ์ ๊ฒฝ์ฐ ๊ทธ ์์ฒด๋ก ๋งฅ๋ฝ์ ํ๋จํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
if๋ฌธ vs ์ผํญ ์ฐ์ฐ์: ๋์ผํ ์กฐ๊ฑด๋ฌธ์ธ๋ฐ ์ด๋ค ๊ฒฝ์ฐ์ ์ฌ์ฉํด์ผ ํ ๊น?
์ฝ๋ ์์ : [์ถ์ฒ] ๊ฐ๋ฐํ๋ ์ ๋๋ฆฌ ์ธํ๋ฐ ๊ฐ์
// ์ผํญ ์ฐ์ฐ์๋ ์๊ฐ๋ณด๋ค ์ฝ๋๋ฅผ ์์ฑํ๋ฉด์ ๋ง์ด ํ์ฉ๋๋ค.
// ์ฝ๋ก (:)์ else์ ์๋ฏธ๋ก ์๊ฐํ๋ฉด ํธํ๋ค.
var title: String = isDarkMode == true ? "๋คํฌ๋ชจ๋ ์
๋๋ค." : "๋คํฌ๋ชจ๋๊ฐ ์๋๋๋ค."
var title: String = isDarkMode ? "๋คํฌ๋ชจ๋ ์
๋๋ค." : "๋คํฌ๋ชจ๋๊ฐ ์๋๋๋ค."
์ด ๋ถ๋ถ์ ๊ฐ๋ ์ฑ์ ๊ณ ๋ คํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ค์ํด๋ณด์ธ๋ค.
์ผํญ ์ฐ์ฐ์๋ ์กฐ๊ฑด์ ๋จ 2๊ฐ์ง๋ก ๋๋ ์ ์์ ๋ ์ฌ์ฉํ ์ ์๋ค. ์งง๊ฒ ์ฒ๋ฆฌํ ์ ์๋ ์ํฉ์ด๋ผ๋ฉด ์ผํญ ์ฐ์ฐ์์ ์ฌ์ฉ์ด ๋ ์ข์๋ณด์ด๊ธด ํ๋, ๋ฌด์์ ๋จ์ฉํด์๋ ์ ๋๋ค๊ณ ์๊ฐํ๋ค. ์ด๋ค ๊ฒฝ์ฐ์๋ if-else๋ฌธ์ด ๋ ๊ฐ๋ ์ฑ์ด ์ข์ ๋๊ฐ ์๊ณ , ์ด๋ค ๊ฒฝ์ฐ์๋ ์ผํญ ์ฐ์ฐ์๊ฐ ๋ ๊ฐ๋ ์ฑ์ด ์ข์ ๋๊ฐ ์๋ค. ๊ฐ๋ ์ฑ์ ์ ๊ณ ๋ คํ๋ฉด ์ ์ ํ ํ๋จ ๊ธฐ์ค์ด ๋์ง ์์๊น ์ถ๋ค.
if๋ฌธ ์น๊ตฌ: if let ๊ตฌ๋ฌธ
์์ธํ ๋ด์ฉ์ ๋ค๋ฅธ ํ์ด์ง์ ๋ฐ๋ก ๊ธฐ์ ํ ์์ ์ด๋ค. (๊ด๋ จ: ์ต์ ๋ ๋ฐ์ธ๋ฉ)
โ guard let ๊ตฌ๋ฌธ๊ณผ ํจ๊ป ์ต์ ๋ ๋ฐ์ธ๋ฉ์ ๋ฐฉ๋ฒ ์ค ํ๋์ด๋ค.
โ ์กฐ๊ฑด๋ฌธ์ด๋ผ๊ณ ๋ณผ ์ ์๋๋ฐ ์กฐ๊ฑด์ nil์ธ ๊ฒฝ์ฐ, ๊ทธ๋ฆฌ๊ณ ์๋ ๊ฒฝ์ฐ๋ก ๋๋ ์ ์๋ค๋ ๊ฒ์ด ํน์ง์ด๋ค.
- โ๏ธ ๊ฐ์ด ์๋ ๊ฒฝ์ฐ ์ฆ, nil์ด ์๋ ๊ฒฝ์ฐ๋ true๋ฅผ ๋ฐํํ๋ค.
- โ๏ธ ๊ฐ์ด ์๋ ๊ฒฝ์ฐ ์ฆ, nil์ธ ๊ฒฝ์ฐ๋ false๋ฅผ ๋ฐํํ๋ค.
์ฝ๋ ์์ : Alamofire/Source/Result+Alamofire.swift
// Alamofire/Source/Result+Alamofire.swift
// ์ด๋ฐ ๋๋์ผ๋ก ์ฌ์ฉ๋ ์ ์์ ๊ฒ ๊ฐ๋ค. ์ ๋ง ๊น๋ํ๋ค.
// error๊ฐ nil์ด๋ฉด error์ ํจ๊ป ์คํจ๋ฅผ ๋์ง๊ณ ,
// error๊ฐ nil์ด ์๋๋ฉด value์ ํจ๊ป ์ฑ๊ณต์ ๋์ง๋ค.
init(value: Success, error: Failure?) {
if let error = error {
self = .failure(error)
} else {
self = .success(value)
}
}
์คํ ์์ค์์ ์ฐพ์๋ณธ if๋ฌธ
์ฌ์ค if๋ฌธ์ ๊ฒฝ์ฐ ํ๋ก์ ํธ ์ ๋ฐ์ ๊ฑธ์ณ์ ๋ค์ํ ๊ฒฝ์ฐ์ ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์ ํน์ ์์๋ฅผ ์ฐพ๋ ๊ฒ์ด ๋ฌด์๋ฏธํ ์๋ ์๋ค. ๊ทธ๋ฌ๋ ์ด๋ ๊ฒ ์คํ ์์ค๋ฅผ ๋ฏ์ด๋ณด๋ ๊ฒ๋ ์ข์ ๊ฒฝํ์ด๋ผ๊ณ ์๊ฐํ๋ค.
๋ค์์ SnapKit์ ์ฝ๋ ์ผ๋ถ์ด๋ค.
1๏ธโฃ updatingExisting ์ด๋ผ๋ Boolean ๊ฐ์ ์ํด์ if-else๋ก ๋ถ๊ธฐ ์ฒ๋ฆฌ๋๊ณ ์๋ค.
2๏ธโฃ first ๊ตฌ๋ฌธ: ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ฐ์ฅ ์ฒซ ๋ฒ์งธ ์์๋ฅผ ๋ฐํ
3๏ธโฃ ์ผํญ ์ฐ์ฐ์ ์ฌ์ฉ
์ด๊ฑด ์ทจํฅ ์ฐจ์ด์ ๋ฌธ์ ์ธ ๊ฒ ๊ฐ์๋ฐ, ๊ฐ์ธ์ ์ผ๋ก ์ด ์ฝ๋์ ๊ฒฝ์ฐ์๋ 2๋ฒ์งธ๊ฐ ๋ ๊ฐ๋ ์ฑ์ด ์ข์๋ณด์ธ๋ค. ์ ์ด๋ ๊ฒ ์์ฑํ์๊น? (์กฐ๊ฑด์ด ๋จ 2๊ฐ์ด๊ณ , ์คํ๋๋ ์ฝ๋๊ฐ ํ ์ค์ฉ์ด๋ฏ๋ก) ์ด๋ฐ ์ด์ ์ผ๊น? ์๋์์ ๋ฌธ์ ๋ ์๊ธฐ ๋๋ฌธ์ ํฌ๊ฒ ์ ๊ฒฝ ์ธ ๋ถ๋ถ์ ์๋ ๊ฒ ๊ฐ๋ค.
let updateLayoutAttribute = (updateLayoutConstraint.secondAttribute == .notAnAttribute) ? updateLayoutConstraint.firstAttribute : updateLayoutConstraint.secondAttribute
if updateLayoutConstraint.secondAttribute == .notAnAttribute {
updateLayoutAttribute = updateLayoutConstraint.firstAttribute
} else {
updateLayoutAttribute = updateLayoutConstraint.secondAttribute
}
์ถ๊ฐ๋ก ์๊ฐํด๋ณด๊ธฐ
์ฝ๋๋ฅผ ์์ฑํ๋ค๋ณด๋ฉด ๊ทธ๋ฐ ์๊ฐ์ด ๋ค ๋๊ฐ ์๋ค. if๋ฌธ์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ๋ค๋ณด๋ฉด ๋ญ๊ฐ ์ฝ๋๊ฐ ์ง์ ๋ถํด์ง๋ ๋๋์ด ๋ค์ด์ ๊ดํ ์ผํญ ์ฐ์ฐ์์ switch-case๋ฌธ์ ์จ์ผ ํ์ง ์์๊น๋ผ๋ ์๊ฐ์ด๋ค.
์๋ฅผ ๋ค์ด์ ์ด๋ฐ ์ฝ๋๊ฐ ์๋ค. ํ ํญ์์๋ ๋ด ์ค์ผ์ค์ ๋ถ๋ฌ์์ผ ํ๊ณ , ๊ณต์ ํญ์์๋ ์น๊ตฌ ์ค์ผ์ค์ ๋ถ๋ฌ์์ผ ํ๋ค. ๊ทธ๋์ ๋๋ ํญ ํ์ ์ ๋ฐ๋ผ์ ๋ค๋ฅธ ์ข ๋ฅ์ ํจ์ ํธ์ถ์ ํ๋ ค๊ณ ํ๋ค.
๋ํ ๋๋ ์ด๋ฐ ์๊ฐ์ ํ๊ณ ์๋ ์ํฉ์ด๋ค. switch-case๋ฌธ์ ์๊ณ ๋๋๊น ์ฝ๋๊ฐ ๋ ๊น๋ํด์ง ๊ฒ ๊ฐ๋ค. ๊ทธ๋์ ๋๋ ํ๋ก์ ํธ๋ง๋ค if๋ฌธ ๋์ ์ switch-case๋ฌธ์ ๊ณ์ํด์ ์จ๋ณด๋ ค๊ณ ํ๋ค.
์๋์ ์ฝ๋ ์ค์ ์ด๋ ๊ฒ์ด ๋ ๋์๋ณด์ผ๊น? ๋จ์ํ ์กฐ๊ฑด์ 2๊ฐ๋ก ๋๋์ด์ ธ ์๊ณ , ์กฐ๊ฑด์ด ๋ ์ด์ ์ถ๊ฐ๋ ๊ฒ ๊ฐ์ง ์๋ค. ๊ทธ๋ ๋ค๋ฉด ๊ตณ์ด ์์ ์์์ฒ๋ผ switch-case๋ฌธ์ ์จ์ผํ ๊น? ๋ญ๊ฐ ์ฝ๋ ์์ผ๋ก ์ข ๋ ๊น๋ํ ๊ฒ ๊ฐ์ ์ ์ง ๋ชจ๋ฅธ ๋๋์ด ๋ค์ง๋ง ๋ถํ์ํ default case๊ฐ ๋ค์ด๊ฐ ์๋ค. ๋ฌผ๋ก share ์ผ์ด์ค ์์ ๋ค์ด๊ฐ ์๋ ๋ ์์ default ์ผ์ด์ค ์์ ์จ์ค ์ ์์ง๋ง ๊ทธ๋ผ ์ฝ๋ ์์ผ๋ก ์ด๋ฏธ ์ง๊ด์ ์ด์ง ๋ชปํ๋ค๊ณ ์๊ฐํ๋ค.
switch tabType {
case .home:
getSchedules(date: selectedDate)
getPillList(date: selectedDate)
case .share:
getFriendSchedules(memberId: memberId, date: selectedDate)
getFriendPillList(id: memberId, date: selectedDate)
default:
return
}
// or
switch tabType {
case .home:
getSchedules(date: selectedDate)
getPillList(date: selectedDate)
default:
getFriendSchedules(memberId: memberId, date: selectedDate)
getFriendPillList(id: memberId, date: selectedDate)
}
if tabType == .home {
getSchedules(date: selectedDate)
getPillList(date: selectedDate)
} else if tabType == .share {
getFriendSchedules(memberId: memberId, date: selectedDate)
getFriendPillList(id: memberId, date: selectedDate)
}
๊ฐ์ธ์ ์ผ๋ก๋ ์ด ๊ฒฝ์ฐ์๋ if๋ฌธ์ด ๋ ์ ์ ํด๋ณด์ธ๋ค.(์๋ ์๋ ์๋ค. ๊ทธ๋๋ ์์์ ๋๋ฆ ๊ทผ๊ฑฐ๋ ๋ค์๋ค.. ) ์ฌ์ค ์ฝ๋ ์์ฑ์๋ ์ ๋ต์ด ์ ๋ ์๋ค๊ณ ์๊ฐํ๋ค. ์ ๋ง ์ฝ๋๋ฅผ ์ ์ง๋ ์ฌ๋๋ ๊ทธ๋ ๊ฒ ์ด์ผ๊ธฐ ํ์ง ์์๊น. (๋ฌผ๋ก ๋ ๋์ ์ฝ๋๋ ์๊ฒ ์ง?)
์ํฉ์ ๋ฐ๋ผ ์ฝ๋์ ์์ฑ ๋ฐฉ๋ฒ์ด๋ ํํ๊ฐ ๋ฌ๋ผ์ง ์ ๋ฐ์ ์์ํ ๋ฐ, ๊ทธ๋ด ๋๋ง๋ค ๋ณธ์ธ์ ๊ธฐ์ค์ ๋ฐ๋ผ์ ๋๋ ๊ด์ฉ์ ์ผ๋ก ์ฐ์ด๋ ํํ์ ๋ฐ๋ผ ์ ์ ํ ํ๋จ์ ํด์ ์ฝ๋๋ฅผ ์์ฑํ ํ์๊ฐ ์๋ค.
๋๋ ์
๊ฐ์ฅ ํฌ๊ฒ ๋๋ ๊ฒ์ if๋ฌธ์ ๋ํ ๋ฌธ๋ฒ๋ณด๋ค๋ ์ฌ์ด ๋ฌธ๋ฒ์ ์ํ๋ ์กฐ๊ฑด๋ฌธ ์กฐ์ฐจ ์์ฑํ๋ ค๊ณ ํ ๋ ๊ณ ๋ฏผ๊ณผ ์๊ฐ์ ํด๋ด์ผ ํ๋ค๋ ๊ฒ์ด๋ค. ์ฝ๋๋ฅผ ์์ฑํ ๋ ์ฌ์ด ์ฝ๋๋ผ๋ ํ ๋ฒ ๋ ์๊ฐํ๋ ์ต๊ด์ ๋ค์ด์.
'๐ iOS & Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[iOS] UISwitch์ offTintColor ๋ณ๊ฒฝํ๊ธฐ (3) | 2022.07.06 |
---|---|
[WWDC22] What's new in SF Symbols 4 (2) | 2022.07.06 |
[iOS] UIWindow (0) | 2021.11.07 |
[iOS] CollectionView Cell ๋๋น ๋์ ์ผ๋ก ์กฐ์ ํ๊ธฐ (8) | 2021.10.28 |
[iOS] ์๋ธ ํด๋์ฑ (6) | 2021.10.07 |