-
Notifications
You must be signed in to change notification settings - Fork 1
Code Convention
๐ป StyleShare - swift style guideย ์ ์ฐธ๊ณ ํ์ฌ ํจ๊ป ํ ์ํ์ผ๋ฉฐ, ํ์ํ ๋ถ๋ถ๋ง ์ฑํํ์์ต๋๋ค.
- ์ฝ๋ก (:)์ ์ธ ๋์๋ ์ฝ๋ก ์ ์ค๋ฅธ์ชฝ์๋ง ๊ณต๋ฐฑ์ ๋ก๋๋ค.
let names: [String: String]?
- ํจ์๋ฅผ ํธ์ถํ๋ ์ฝ๋๊ฐ ์ต๋ ๊ธธ์ด๋ฅผ ์ด๊ณผํ๋ ๊ฒฝ์ฐ์๋ ํ๋ผ๋ฏธํฐ ์ด๋ฆ์ ๊ธฐ์ค์ผ๋ก ์ค๋ฐ๊ฟํฉ๋๋ค.
let actionSheet = UIActionSheet(
title: "์ ๋ง ๊ณ์ ์ ์ญ์ ํ์ค ๊ฑด๊ฐ์?",
delegate: self,
cancelButtonTitle: "์ทจ์",
destructiveButtonTitle: "์ญ์ ํด์ฃผ์ธ์"
)
- ๋จ, ํ๋ผ๋ฏธํฐ์ ํด๋ก์ ๊ฐ 2๊ฐ ์ด์ ์กด์ฌํ๋ ๊ฒฝ์ฐ์๋ ๋ฌด์กฐ๊ฑด ๋ด๋ ค์ฐ๊ธฐํฉ๋๋ค.
UIView.animate(
withDuration: 0.25,
animations: {
// doSomething()
},
completion: { finished in
// doSomething()
}
)
- if let ๊ตฌ๋ฌธ์ด ๊ธธ ๊ฒฝ์ฐ์๋ ์ค๋ฐ๊ฟํ๊ณ ํ ์นธ ๋ค์ฌ์๋๋ค.
if let user = self.veryLongFunctionNameWhichReturnsOptionalUser(),
let name = user.veryLongFunctionNameWhichReturnsOptionalName(),
user.gender == .female {
// ...
}
- guard let ๊ตฌ๋ฌธ์ด ๊ธธ ๊ฒฝ์ฐ์๋ ์ค๋ฐ๊ฟํ๊ณ ํ ์นธ ๋ค์ฌ์๋๋ค. else๋ guard์ ๊ฐ์ ๋ค์ฌ์ฐ๊ธฐ๋ฅผ ์ ์ฉํฉ๋๋ค.
guard let user = self.veryLongFunctionNameWhichReturnsOptionalUser(),
let name = user.veryLongFunctionNameWhichReturnsOptionalName(),
user.gender == .female
else {
return
}
-
ํ ์ค์ ์ต๋ 99์๋ฅผ ๋์ง ์์์ผ ํฉ๋๋ค.
- Xcode์ Preferences โ Text Editing โ Display์ 'Page guide at column' ์ต์ ์ ํ์ฑํํ๊ณ 99์๋ก ์ค์ ํ๋ฉด ํธ๋ฆฌํฉ๋๋ค.
- MARK ๊ตฌ๋ฌธ ์์๋ ๊ณต๋ฐฑ์ด ํ์ํฉ๋๋ค.
// MARK: Layout
override func layoutSubviews() {
// doSomething()
}
// MARK: Actions
override func menuButtonDidTap() {
// doSomething()
}
- ๋ชจ๋ ์ํฌํธ๋ ์ํ๋ฒณ ์์ผ๋ก ์ ๋ ฌํฉ๋๋ค. ๋ด์ฅ ํ๋ ์์ํฌ๋ฅผ ๋จผ์ ์ํฌํธํ๊ณ , ๋น ์ค๋ก ๊ตฌ๋ถํ์ฌ ์๋ํํฐ ํ๋ ์์ํฌ๋ฅผ ์ํฌํธํฉ๋๋ค.
import UIKit
import SwiftyColor
import SwiftyImage
import Then
import URLNavigator
- ํด๋์ค ์ด๋ฆ์๋ UpperCamelCase๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ํด๋์ค ์ด๋ฆ์๋ ์ ๋์ฌPrefix๋ฅผ ๋ถ์ด์ง ์์ต๋๋ค.
- ํจ์ ์ด๋ฆ์๋ lowerCamelCase๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ํจ์ ์ด๋ฆ ์์๋ ๋๋๋ก์ด๋ฉด get์ ๋ถ์ด์ง ์์ต๋๋ค.
์ข์ ์:
func name(for user: User) -> String?
๋์ ์:
func getName(for user: User) -> String?
- ๋ณ์ ์ด๋ฆ์๋ lowerCamelCase๋ฅผ ์ฌ์ฉํฉ๋๋ค.
-
์์ ์ด๋ฆ์๋ lowerCamelCase๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ์ข์ ์
let maximumNumberOfLines = 3
- ๋์ ์
let MaximumNumberOfLines = 3 let MAX_LINES = 3
-
enum์ ๊ฐ case์๋ lowerCamelCase๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- ์ข์ ์
enum Result { case .success case .failure }
- ๋์ ์
enum Result { case .Success case .Failure }
-
์ฝ์ด๋ก ์์ํ๋ ๊ฒฝ์ฐ ์๋ฌธ์๋ก ํ๊ธฐํ๊ณ , ๊ทธ ์ธ์ ๊ฒฝ์ฐ์๋ ํญ์ ๋๋ฌธ์๋ก ํ๊ธฐํฉ๋๋ค.
- ์ข์ ์
let userID: Int? let html: String? let websiteURL: URL? let urlString: String?
- ๋์ ์
let userId: Int? let HTML: String? let websiteUrl: NSURL? let URLString: String?
-
Delegate ๋ฉ์๋๋ ํ๋กํ ์ฝ๋ช ์ผ๋ก ๋ค์์คํ์ด์ค๋ฅผ ๊ตฌ๋ถํฉ๋๋ค.
- ์ข์ ์
protocol UserCellDelegate { func userCellDidSetProfileImage(_ cell: UserCell) func userCell(_ cell: UserCell, didTapFollowButtonWith user: User) }
- ๋์ ์
protocol UserCellDelegate { func didSetProfileImage() func followPressed(user: User) // `UserCell`์ด๋ผ๋ ํด๋์ค๊ฐ ์กด์ฌํ ๊ฒฝ์ฐ ์ปดํ์ผ ์๋ฌ ๋ฐ์ func UserCell(_ cell: UserCell, didTapFollowButtonWith user: User) }
- ๊ทธ๋๋ก ์ฑํ
-
//
๋ฅผ ์ฌ์ฉํด์ ๋ค๋ฅธ ํ์์ ์ฐธ๊ณ ์ฉ์ผ๋ก ํ์ํ ์ฃผ์์ ๋จ๊น๋๋ค. ์ฝ๋๋ฅผ ์์๋ณด๊ธฐ ์ด๋ ต๋ค๊ณ ์์ธก๋๋ ๊ณณ์๋ง ์ฃผ์์ ํ์ํฉ๋๋ค.- ์์
// ์ฌ์ฉ์ ํ๋กํ์ ๊ทธ๋ ค์ฃผ๋ ๋ทฐ class ProfileView: UIView { // ์ฌ์ฉ์ ๋๋ค์์ ๊ทธ๋ ค์ฃผ๋ ๋ผ๋ฒจ var nameLabel: UILabel! }
-
// MARK:
๋ฅผ ์ฌ์ฉํด์ ์ฐ๊ด๋ ์ฝ๋๋ฅผ ๊ตฌ๋ถ์ง์ต๋๋ค.-
Objective-C์์ ์ ๊ณตํ๋ #pragma mark์ ๊ฐ์ ๊ธฐ๋ฅ์ผ๋ก, ์ฐ๊ด๋ ์ฝ๋์ ๊ทธ๋ ์ง ์์ ์ฝ๋๋ฅผ ๊ตฌ๋ถํ ๋ ์ฌ์ฉํฉ๋๋ค.
-
์์
// MARK: Init override init(frame: CGRect) { // doSomething() } deinit { // doSomething() } // MARK: Layout override func layoutSubviews() { // doSomething() } // MARK: Actions override func menuButtonDidTap() { // doSomething() }
-