-
Notifications
You must be signed in to change notification settings - Fork 4
Ground Rules iOS
woongs edited this page Dec 1, 2020
·
13 revisions
- ํน๋ณํ ์ผ์ด ์์ผ๋ฉด ์คํ๋ผ์ธ์ผ๋ก ๋ง๋์ ๊ฐ๋ฐ ์งํ (feat. ์คํ์ด์ ํ ๋ฆฌ์ค)
- PR์ merge๋ ์๋๋ฐฉ์ด ์ฝ๋๋ฆฌ๋ทฐ ํ ์ํํ๋ค (ํ๋ง๋๋ผ๋ ์ ์ฑ์ค๋ฝ๊ฒ ์ฝ๋ฉํธ ๋จ๊ธฐ๊ธฐ)
- Trouble Shooting์ ์์ฑํ๋ค
- ์ด์๊ฐ ์๊ธฐ๋ฉด ๋ฌธ์ ์ํฉ์ ๋จผ์ ๊ธฐ๋กํ๋ค
- ํด๊ฒฐ ๊ณผ์ ์ ์ต๋ํ ์์ธํ ๊ธฐ๋กํ๊ณ ๊ฒฐ๋ก ์ ๊ฐ๊ฒฐํ๊ฒ ์ ๋๋ค
- ๊ฐ๋ฅํ๋ฉด ์คํฌ๋ฆฐ์ท์ด๋ ์ฝ๋๋ฅผ ์งง๊ฒ ๊ธฐ๋กํ๋ค
- ๊ณต๋ Notion(ํผ๋๋ฐฑ์
โฅ๏ธ ์ ๋๋ค ๐)์ ๊ธฐ๋กํ๊ณ ์ดํ ์ํค์ ์ถ๊ฐํ๋ค
- ํจ๊ป ๋
ผ์ํ
// MARK
๋ฑ์ ํ์ฉํ์ฌ ์ฝ๋ ๊ฐ๋ ์ฑ์ ๋์ธ๋ค - Naming์ด๋ Convention๊ท์น์ swift api design guideline์ ๋ฐ๋ฅธ๋ค.
- ํ ๊ณ ๋DO๋ Human Interface Guidelines๋ฅผ ์ค์ํ๋ค
์๋์ ๋ฐ๋ก ๋ช ์ํ์ง ์๋ ๋ด์ฉ์ Google Swift Style Guide์ ์ค์ํ๋ค.
- return ์์ ํ ์ค์ ๋๋ค.
- ๋จ, return ํ ์ค๋ง ์๋ ๋ฉ์๋๋ ์์ธ๋ก ํ๋ค.
- ์ค๊ฐ์ ๊ณต๋ฐฑ์ ์๋ฏธ์๋ ๋จ์๋ก ๊ตฌ๋ถํ๋ค.
func filterCompletedIfNeeded(for displayedTasks: [TaskListModels.DisplayedTask]) -> [TaskListModels.DisplayedTask] {
guard displayCompleted else {
return displayedTasks.filter { !$0.isCompleted }
}
return displayedTasks
}
- private extension ๋ด๋ถ์ ๋ฉ์๋์๋
private
ํค์๋๋ฅผ ๋ถ์ด์ง ์๋๋ค.
- self ํค์๋๋ ํ์์์๋ง ๋ช
์ํ๋ค.
- self ์ฐธ์กฐ๊ฐ ํ์ํ ๋
- ๋ก์ปฌ ๋ณ์์ ์ด๋ฆ์ด ๊ฒน์น ๋
- ์กฐ๊ฑด๋ฌธ์ด ํ๋์ด๊ณ else ๋ฌธ์์ ๊ฐ๋จํ return๋ง ํ๋ ๊ฒฝ์ฐ
guard let value = value else { return 0 }
- ์กฐ๊ฑด๋ฌธ์ด ํ๋์ด๊ณ else ๋ฌธ์ด ๊ธธ์ด์ง๋ ๊ฒฝ์ฐ
guard let first = values.first else {
throw DiscombobulationError.arrayWasEmpty
}
- ์กฐ๊ฑด๋ฌธ์ด ํ๋์ง๋ง ๊ธธ์ด์ง ๊ฒฝ์ฐ ๋ด๋ ค์ธ ์ ์๋ค.
guard let task = taskList.task(identifier: viewModel.id,
postion: viewModel.position,
parentPosition: viewModel.parentPosition)
else {
return
}
- ์กฐ๊ฑด๋ฌธ์ด 2๊ฐ ์ด์์ธ ๊ฒฝ์ฐ
guard let value = aValueReturnedByAVeryLongOptionalThing(),
let value2 = aDifferentValueReturnedByAVeryLongOptionalThing()
else {
doSomething()
}
- ์กฐ๊ฑด๋ฌธ์ด ํ ์ค์ผ ๋,
if let index = index(of: thing, in: lotsOfThings) {
// Found it.
} else {
// Didn't find it.
}
- ์กฐ๊ฑด๋ฌธ์ด ๋ ์ค ์ด์์ผ ๋,
if let index = index(of: thing, in: lotsOfThings),
condition2 {
// Found it.
} else {
// Didn't find it.
}
์ ๊ทผ์ ํ์๋ ๋ค์ ์์๋๋ก ๋ฐฐ์น: private - private(set) - internal(์๋ต) - public
// MARK: - Constants
// MARK: - Properties
// MARK: Views
@IBOutlet weak private var addButton: UIButton!
private var label = UILabel()
// MARK: - View Life Cycle
// MARK: - Initialize
// MARK: - Methods
// MARK: Private
// MARK: IBActions
- 8๊ธ์ ์ดํ๋ ํ ์ค, ๊ทธ ์ด์์ ๋ ์ค๋ก ์ฌ์ฉํ๋ค.
@objc func didTappedButton() {
}
@discardableResult
func remove(at index: Int) -> Int {
}
- ํ๋กํ ์ฝ ๋ฉ์๋ ํ๋จ์
//MARK: - Helper Functions
๋ก ๊ตฌ๋ถํด์ ๋ฐฐ์นํ๋ค.
- ํน์ ํ ๊ธฐ๋ฅ์ ์ํ ๋ฉ์๋๋ค์ด 30์ค ์ด์์ด๋ฉด ๋ณ๋์ extension์ผ๋ก ๋ถ๋ฆฌํ๋ค. ๋จ,
MARK
๋ฅผ ํตํด ๊ธฐ๋ฅ์ ๋ช ์ํ๋ค.- 30์ค ์ดํ์ผ ๋ ๋ถ๋ฆฌ๊ฐ ํ์ํ๋ค๊ณ ํ๋จ๋๋ฉด, ํ์๊ณผ ์์ํ์ ๋ถ๋ฆฌํ ์ ์๋ค.
- ํน์ protocol์ ์ฑํํ extension๋ณด๋ค ์์ ๋ฐฐ์นํ๋ค.