var num1:Int? = 30
var num2:Int = 300
//์ต์
๋ ์ธํธํ๊ณผ ๊ทธ๋ฅ ์ธํธํ ๋ณ์ ์ ์ธ
num1 = nil // OK
num2 = nil // ์ปดํ์ผ ์๋ฌ , ์ต์
๋์ด ์๋๋ฏ๋ก
//์ฌ๋ฐ๋ฅธ ์ต์
๋ ๋ฐ์ธ๋ฉ? if let or guard let
if let bindingNumber = num1 {
let sum = bindingNumber + num2
}- ๋์์ธ ํจํด(http://blog.naver.com/jdub7138/220968244920)
- singleton ํจํด: ๊ฐ์ฒด๋ฅผ ํ๋๋ง ์์ฑํ์ฌ, ์์ฑ๋ ๊ฐ์ฒด๋ฅผ ์ด๋์๋ ์ฐธ์กฐํ ์ ์๋๋ก ํ๋ ํจํด
class RecommendationService {
static let shared = RecommendationService()
private init() {}
//ํต์ ์ฝ๋
//๋ก๊ทธ์ธ ์ ๋ณด, ํ๊ฒฝ ์ค์ ๊ฐ ๋ฑ ์ ์ฅ
}-
delegate ํจํด ์ค๋ช https://shark-sea.kr/entry/swift-delegate , https://velog.io/@delmasong/Delegate-pattern-in-iOS-x1k6f9jzx8
-
๋ธ๋ฆฌ๊ฒ์ดํธ ํจํด์ ์ฝ๊ฒ ๋งํด์, ๊ฐ์ฒด ์งํฅ ํ๋ก๊ทธ๋๋ฐ์์ ํ๋์ ๊ฐ์ฒด๊ฐ ๋ชจ๋ ์ผ์ ์ฒ๋ฆฌํ๋ ๊ฒ์ด ์๋๋ผ ์ฒ๋ฆฌ ํด์ผ ํ ์ผ ์ค ์ผ๋ถ๋ฅผ ๋ค๋ฅธ ๊ฐ์ฒด์ ๋๊ธฐ๋ ๊ฒ์ ๋ป ํฉ๋๋ค.
์ถ์ฒ: https://zeddios.tistory.com/8 [ZeddiOS]
-
[1] MVC (Model - View - Controller)
Model( ๋ก์ง ๋ฐ ๋ฐ์ดํฐ ๋ด๋น) --(Update ,Notify)--- Controller(Model๊ณผ View๋ค๋ฆฌ ์ญํ ) ---(Delegate , Update)--- View(ํ๋ฉดpresentation ๋ด๋น)
์ ํ์ MVC ํจํด์์๋ View์ Controller๊ฐ ๋๋ฌด ์นํจ , Controller๊ฐ View life cycle์ ๊ด์ฌํ๊ธฐ ๋๋ฌธ์ ์์ ํ View ์ Controller์ ๋ถ๋ฆฌ๊ฐ ํ๋ฌ
[2] MVVM(Model - View - ViewModel)
ViewModel - Model๊ณผ View ๋ค๋ฆฌ ์ญํ (VM์ Model๊ณผ interact, Binding์ผ๋ก ์ธํด VM์ด ๋ฐ๋๋ฉด View๋ ๋ฐ๋ ๋ณดํต ViewModel๊ณผView๋ฅผ Bindingํ ๋ RX์ด์ฉ)
Model - Business Logic , Data
View - ํ๋ฉด ๋ด๋น ์์ Controller --(<-Delegate, ->Update) -- View
- ์ ํ์ ํ๋ ์์ํฌ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๊ฐ์ฒด์งํฅ, Swift๋ ๊ฐ์ฒด์งํฅ์ ํฌํจํ ํจ์ํ ์ธ์ด (๋ํ์ ์์: ํด๋ก์ )
- ํจ์ํํ๋ก๊ทธ๋๋ฐ? ํจ์๋ฅผ ๋ฉ์๋์ ์ ๋ฌ์ธ์๋ก ๋ณด๋ด๋ ์ผ = ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์์ ๋น์ฐํ ์ผ
- ํด๋ก์ ์ ์ค์ ํ๋ก์ ํธ์์์ ์์, ์ปดํ๋ฆฌ์ ํธ๋ค๋ฌ ๋ฐ ํต์ ํ ๋
- ํด๋ก์ ํํ์ ํต์์ ํ์
{ (๋งค๊ฐ๋ณ์๋ค) -> ๋ฐํ ํ์
in
Code
}- ๊ฐ๋ ์ด ๋ ์ข์ ํํ ํด๋ก์
let reversed: [String] = names.sorted {
return $0 > $1
}- ์์์ ๋ฐํ ํํ ( return ๋ง์ ์๋ต !!)
let reversed: [String] = names.sorted { $0 > $1 }-
intrinsic contents size๋?
-
auto closure๋?
-
Swift iOS APP Store Animation
-
๊ตฌ์ฑ CollectionView - CollectionViewCell ( ShadowView ์์ CommonView)
-
CommomView๋ ํ์ DetailView์ ๊ณตํต์ ์ผ๋ฃ ์ฌ์ฉ๋์ด์ง
-
ShadowView๋ ์ ์ ๊ฒ๋ถ๋ถ์ ๊ทธ๋ฆผ์๋ฅผ ์ฃผ๊ธฐ ์ํจ, ๊ทธ๋ฅ Cell์ ์ปค์คํ ํ XIB๋ฅผ ์ด์ฉํ ์ Shadow๊ฐ ์ ์ฉ๋์ด์ง์ง ์์์ ํด๊ฒฐํ๊ธฐ ์ํจ
-
๋คํ์ ๋๋ฉ์ด์ ์ ์ด์ฉํด DetailView๋ก ์ ํ, ์ด๋ NavigationController๋ฅผ Customํด์ Animation์ ๋ง๋ค์ด์ค, NavigationController์ UIPresentationController๊ฐ ์์ผ๋ฉด ์ ๋๋ฉ์ด์ ์ ํ์ด ๋ถ๊ฐ๋ฅํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ฌ์ฉ์ ์ ์ ์ ํ ์ ๋๋ฉ์ด์ ์ ์ป๊ธฐ ์ํจ
-
Animatable์ด๋ผ๋ ํ๋กํ ์ฝ์ ๋ง๋ค์ด, sizeAnimator , positionAnimator๋ฅผ ๊ตฌํํ๊ณ ์ด๋ฅผ ์ด์ฉํด ์ปค์คํ ์ ๋๋ฉ์ด์ ์ ๋ง๋ค์ด๋ ๋๋ค.
// Put the completion handler on the longest lasting animator if (self.positioningDuration > self.resizingDuration) { positionAnimator.addCompletion(completionHandler) } else { sizeAnimator.addCompletion(completionHandler) }- ๊ฐ์ฅ ๋ฆ๊ฒ ๋๋๋ ๊ณณ์ ํธ๋ค๋ฌ๋ฅผ ๋์ ํฉ๋๋ค.
- ์ปฌ๋ ์ ๋ทฐ์ ์นด๋์ ์ ํฐ์น์, ๋ํ ์ผ๋ทฐ๊ฐ ์ ์ฒ๋ผ ๋ณด์ฌ์ง๋ฉด์ ํ๋ฉด์ ์ ์ฒดํฌ๊ธฐ๋ก ๋ฆฌ์ฌ์ด์ง ๋๋ฉด์ ์ ๋๋ฉ์ด์ ์ด ์ ์ฉ๋์ด์ง๋๋ค.
-
์ค์ ๋ฉด์
- static๊ณผ ์ฑ๊ธํด ํจํด์ ์ฐจ์ด?
- ๋๋ค ์ค๋ฒ๋ผ์ด๋ฉ์ด ๊ฐ๋ฅํ๊ฐ? (static์ ๋์ง ์๋๋ค, ์ฑ๊ธํด ํจํด์ ์ค๋ฒ๋ผ์ด๋ฉ ๋์ง ์๊ฒ ํ๋๊ฒ)
- 100๊ฐ์ ๊ฐ๊ธฐ ๋ค๋ฅธ ์ด๋ฏธ์ง๋ทฐ(์คํฌ๋กค๋๋)๋ฅผ ํต์ ํด์ ๋ฐ์์ฌ๋, ๋ค ์
๋ฐ์ดํธ ๋์ง ์๊ฒ ๊ณผ์ ์ ์ค์ฌ๋ณด์๋ผ
- NSCache key๊ฐ์ ์ด์ฉํด key๊ฐ์ด ๋ค๋ฅธ ์ด๋ฏธ์ง๋ทฐ๋ง ์ ๋ฐ์ดํธ
- What's git - Cherry-pick and rebase,revert
- https://github.com/raywenderlich/swift-style-guide Swift style ๊ณต๋ถ
- https://zetal.tistory.com/entry/swift-๊ธฐ์ด๋ฌธ๋ฒ-15-๋งตMap-ํํฐFilter-๋ฆฌ๋์คReduce /Map Filter ๊ณต๋ถ