์๋
ํ์ธ์, ํ๋ผ์
๋๋ค. ์ด๋ฒ ๊ธ์ ์ ๋ฆฌํํ๋ก ์์ฑํด๋์ด ์ดํฌ๊ฐ ์กฐ๊ธ ๋ฑ๋ฑํ ์ ์์ต๋๋ค.. ์ดํด๋ถํ๋๋ ค์ ๐ฅฒ ์ด๋ฒ ๊ธ์ ์ดํฌ๋ ๋ฑ๋ฑํ๊ณ ์ค๊ธ ํ์์ด๋ค. ๋๋ฌด ์ด๋ ต๊ฒ ์๊ฐํ ํ์๊ฐ ์๋ ๊ฐ๋
์ด๋ค. ๋จ์ํ๊ฒ ๋ง์๋ณด์. ์์ฝ ํ๋กํ ์ฝ์์ ์ฌ์ฉ๋๋ ์ ๋ค๋ฆญ Placeholder์ ๋๋์ด๋ค. Associated Type์ ์๋ typealias์๋๋ฐ, Swift 2.2๋ถํฐ Associated Type์ด๋ ํค์๋๋ก ๋ฐ๋์๋ค. ์ค๋ช
์์ ๋ ๊ฐ์ง ๊ด์ ์์ ๋ณด๋ฉด ๋ด์ฉ์ ํฌ๊ฒ ์ด๋ ต์ง ์๋ค. ์๋์ ์์๋ก ํจ๊ป ์ดํดํด๋ณด๊ฒ ๋ค. ์ฐ์ ํ๋ก์ ํธ์ ๋ํด ์ ๊น ์ดํดํด๋ณด๋ฉด, ํ๋ก์ ํธ๋ ํ์ฌ MVVM ํจํด์ ๋ฐ๋ฅด๊ณ ์๋ค. ๋ค์ ํ๋ก์ ํธ์์๋ ๋น์ฆ๋์ค ๋ก์ง์ ์ฒ๋ฆฌํ๋ ViewModel์ ๊ตฌํํด์ผ ํ๋ค. ๋ณดํต ๊ฐ ViewControlle..
๐ iOS & Swift
ํด๋น ๊ธ์ ์ฌ์ฉ๋ ์์๋ 2๊ฐ์ง ๊ธ์์ ๊ฐ์ ธ์์ต๋๋ค. ์ถ์ฒ๋ ๊ธ ๋ง์ง๋ง์ ์ ์ด๋์์ต๋๋ค. ์ฐธ๊ณ ํ์
์ ๊ธ ์ฝ์ด์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค :) ๐ฌ ๋ค์ด๊ฐ๊ธฐ์ ์ ๊ฒฐ๋ก ๋ถํฐ ๋งํ๊ณ ์์ํ๊ฒ ์ต๋๋ค. typealias๋ ์ฝ๋๋ฅผ ์ข ๋ ๊ฐ๊ฒฐํ๊ฒ ๊ฐ๋
์ฑ์๊ฒ ์์ฑํ๊ธฐ ์ํด์ ์ฌ์ฉํฉ๋๋ค. ์ธ์ ์ฌ์ฉํ๋๊ตฌ์? ์ ๋ต์ ์์ต๋๋ค. ๋ค๋ง ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ ์์ฃ . ์ด๋ฒ ๊ธ์์๋ ๊ทธ ๋ถ๋ถ์ ๋ํด์ ํจ๊ป ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค. ๐ typealias๋ typealias๋ ํ์
์ ๋ถ์ผ ์ ์๋ ๋ณ์นญ, ์ฝ์นญ์
๋๋ค. typealias (์ฌ์ฉํ ๋ณ๋ช
) = (์กด์ฌํ๋ ํ์
) ex) typealias Nickname = Int ex) typealias Codable = Decodable & Encodable ex) ... typealias๋ ์..
์ด์ฌํ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์์ UI์ ๋ฟ๋ ค์ฃผ๋ ์์
์ค ๋์ ํ ๊ฐ๋งํ ์์ ์ ์๋ ์ด์๊ฐ ๋ฐ์ํ์ต๋๋ค. ํ
์คํธ ๊ฐ ์์ html ํ๊ทธ๊ฐ ํฌํจ๋์ด ์์ด ๋ผ๋ฒจ์ ๊ทธ๋๋ก ํํ๋๊ณ ์๋ ๊ฒ์
๋๋ค. ํจ๊ณผ๊ฐ ์ ์ฉ์ด ๋๊ฑฐ๋ ์ฌ๋ผ์ง๊ธธ ์ํ๋๋ฐ ์ ๊ฑฐํ๋ ๋ฐฉํฅ ์ชฝ์ผ๋ก ๊ฐ๊ธฐ๋ก ํ์ด์. ์ข์ ์ต์คํ
์
์ด ์์ด์ ๊ทธ๋๋ก ๊ฐ์ ธ์์ ์ฌ์ฉํด๋ดค๋๋ฐ ๊น๋ํ๊ฒ ์ ์ฉ์ด ๋์์ต๋๋ค. ์ต์คํ
์
์ ์ดํดํ๋ ์๊ฐ๋ ๊ฐ์ง ํ์๊ฐ ์์ ๊ฒ ๊ฐ์ต๋๋ค. ์ฐ์ ์ ๊ทธ๋ฅ ์ฌ์ฉํ๋ ๊ฒ์ผ๋ก ํ๊ฒ ์ต๋๋ค~! ์ถ๊ฐ๋๋ ๋ด์ฉ์ด ์์ผ๋ฉด ์
๋ฐ์ดํธ ํ๋๋ก ํ๊ฒ ์ต๋๋ค :) // ํ
์คํธ์ ํฌํจ๋์ด ์๋ HTMLํ๊ทธ ์ ๊ฑฐํ๊ธฐ (์ต์คํ
์
) extension String { // html ํ๊ทธ ์ ๊ฑฐ + html entity๋ค ๋์ฝ๋ฉ. var htmlEscaped: String { guar..
์๋
ํ์ธ์, ํ๋ผ์
๋๋ค~ ์ค๋์ Convenience initializer๊ฐ ๋ฌด์์ธ์ง ์์๋ณด๊ฒ ์ต๋๋ค! ์ด๋์
๋ผ์ด์ ๋ ํฌ๊ฒ 2๊ฐ์ง๋ฅผ ์ดํด๋ณผ ์ ์์ต๋๋ค. Designated initializer, Covenience initializer ์ฐจ๋ก๋๋ก ์ง์ ์ด๋์
๋ผ์ด์ , ํธ์ ์ด๋์
๋ผ์ด์ ๋ผ๊ณ ํด์ํด๋ณผ ์ ์๋๋ฐ, ์ง์ ์ด๋์
๋ผ์ด์ ๋ ํด๋์ค(๊ตฌ์กฐ์ฒด)๋ด์ ๋ชจ๋ ํ๋กํผํฐ๊ฐ ์ด๊ธฐํ๋ ์ ์๋๋ก ํด์ฃผ๋ ์ด๋์
๋ผ์ด์ ์ด๊ณ , ํธ์ ์ด๋์
๋ผ์ด์ ๋ ์ถ๊ฐ์ ์ธ ์์
์ ํ ์ ์๋๋ก ํด์ฃผ๋ ๋ณด์กฐ ์ด๋์
๋ผ์ด์ ์
๋๋ค. Designated init ์ ํ๋ผ๋ฏธํฐ ์ผ๋ถ๋ฅผ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ค์ ํด์ Convenience init ์์์ Designated init ์ ํธ์ถํด์ ์ธ ์ ์์ต๋๋ค. ์ค์ํ ํฌ์ธํธ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. Convenience i..
์๋
ํ์ธ์, ํ๋ผ์
๋๋ค :) ์์ฆ์๋ ํ ๋จ๊ณ ๋ ์ฑ์ฅํ๊ธฐ ์ํด์ ๋ค์ ๊ธฐ์ด๋ถํฐ ์ฐจ๊ทผ์ฐจ๊ทผ ๊ณต๋ถํ๋ ์ค์
๋๋ค. ํ์คํ ๊ณต๋ถ๋ฅผ ํ๋ค๋ณด๋ ์ด์ ์ ์๋ฌด ์๊ฐ์์ด ์์ฑํ๋ ์ฝ๋๋ ๊ฐ๋
๋ค์ด ๋์ ํ ๋๋๋ผ๊ตฌ์... ์๊ณ ์ฌ์ฉํ๋๊ฑฐ๋ ๋ชจ๋ฅด๊ณ ์ฌ์ฉํ๋๊ฑฐ๋์ ์ญ์ ์์ฒญ๋ ์ฐจ์ด์ด๊ธฐ ๋๋ฌธ์ ํญ์ ๊ธฐ์ด๋ถํฐ ํํํ ํฉ์๋ค... (๊ทผ๋ฐ ๊ธฐ์ด๋ง ๊ณต๋ถํ๋ค๋ณด๋ฉด ํฅ๋ฏธ๊ฐ ๋จ์ด์ง๋๊ฑด ์ฌ์ค... ๊ทธ๋ฌ๋๊น ์ ์ ํ ์๋ฆฌ์กฐ๋ฆฌ ์์์ฃ ...? ๐) frame vs bounds ์ค๋์ frame๊ณผ bounds์ ๋ํด ์ ๋ฆฌํ ๊ฑฐ์์. ์ ๊ทผ๋ฐ, ์์ฝ๋ฒ์ ์ด๋๊น ์์ธํ์ง ์์๋ ์ดํดํด์ฃผ์ธ์... ๊ผผ๊ผผํ ์ค๋ช
๋ฒ์ ์ ๋์ค์... ์ฐ์ ๋ค ์ดํดํ๊ณ ๋์ ์ ๋ฆฌ๋ฅผ ํด๋ณด๋ฉด frame๊ณผ bounds์ ์ฐจ์ด๋ ๋ค์ 3๊ฐ์ง๋ก ์ ๋ฆฌํ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค. ์ขํ๊ณ์ ๋ํ ์ฐจ..
์ฐ๋ฆฌ๋ ์ต์
๋์ ๋ํด ๋ฌผ์์ ๋, ์ผ๋ง๋ ์ ๋๋ตํ ์ ์์๊น? Summary ์ต์
๋์ ๋ณ์์ ๊ฐ์ด ์์ ์๋ ์๊ณ , ์์ ์๋ ์๋ ์ํ(nil)๋ฅผ ํํํ๊ธฐ ์ํด Swift์ ๋์
๋ ๊ฐ๋
์
๋๋ค. ์ต์
๋์ Enum ํํ๋ก ์ ์๋์ด ์๊ณ , ๊ฐ์ ์๊ณ ์์์ ๊ฐ Case๋ก ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ต์
๋๋ก ํํ๋ ๊ฐ์ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ์ผ๋ก๋ Forced Unwrapping(๊ฐ์ ์ธ๋ํ), Optional Binding(์ต์
๋ ๋ฐ์ธ๋ฉ), Nil-Coalescing Operator(Nil๋ณํฉ์ฐ์ฐ์)๊ฐ ์์ต๋๋ค. ์ต์
๋ ์ฒด์ด๋์ ํตํด์ ์ต์
๋ ๋ฐ์ธ๋ฉ์ผ๋ก ํํ๋ ์ฝ๋๋ฅผ ๊ฐ๊ฒฐํ๊ฒ ์์ฑํ ์ ์์ต๋๋ค. ์ต์
๋(Optional) ๋๋ ๋
์ ์ต์
๋์ ์๋ฏธ ์ ์ฐ๋ฆฌ๋ ๊ทผ๋ณธ์๋ ๊ฐ๋ฐ์์ด๊ธฐ ๋๋ฌธ์ Apple ๊ณต์ ๋ฌธ์๋ฅผ ๋ณด๋๋ก ํ์ฃ . (..
์๋
ํ์ธ์~ ์ด์ ๋ ์ด๋ฐ ์์ ์ด์๋ค๋ ์ ๊ธฐ๋กํด๋์ผ๋ ค๊ณ ํฉ๋๋ค. ๋๊ตฐ๊ฐ๋ ์ ์ฒ๋ผ ์ด์๋ฅผ ๊ฒช๊ณ ์ฐพ์ผ๋ ค๊ณ ํ ํ
๋๊น์! ๋์์ด ์กฐ๊ธ์ด๋ผ๋ ๋๋ฉด ์ข๊ฒ ์ต๋๋ค. ํน์ Info.plist๋ฅผ ์ฎ๊ธฐ๊ณ ๋๋๊น ์ ์์ ์ผ๋ก ๋น๋๊ฐ ์๋์๋์? ๊ทธ๋ผ ๊ฑฐ์ 90% ํ๋ฅ ๋ก ์ด ์ด์์ผ ๊ฒ ๊ฐ์์. (์ข ๊ณผ์ฅ๋๊ธฐ๋ ํ์ง๋ง...ใ
ใ
) ์ด์ ์ํฉ ๋ณดํต ์ฒ์ ํ๋ก์ ํธ๋ฅผ ์ธํ
ํ ๋, Info.plist์ ์์น๋ฅผ ์ฎ๊ฒผ์ ๋ ํด๋น ์ด์๊ฐ ๋ฐ์ํฉ๋๋ค. ์๋ Info.plist๋ ํ๋ก์ ํธ ๋ฐ๋ก ๋ฐ์ ์์นํด์๊ธฐ ๋๋ฌธ์, ๋ค๋ฅธ ํด๋๋ก ์ฎ๊ธฐ๊ฑฐ๋ ์์น๋ฅผ ์ฎ๊ฒผ์ ๋ ๊ทธ ๊ฒฝ๋ก๋ฅผ ๋ค์ ์ง์ ํด์ฃผ์ด์ผ ํด์. Showing All Messages Build input file cannot be found: '/Users/taehy.k/Desktop/MVVMSamp..
Generic(์ ๋ค๋ฆญ) Generic์ ์ค๋ณต์ ํผํ๋ฉด์ ๋งค์ฐ ์ ์ฐํ๊ณ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ํจ์์ ํ์
์ ์์ฑํ ์ ์๋๋ก ํด์ค๋ค. ์ฌ์ค ์ด๋ก ์ผ๋ก์จ Generic์ ๊ทธ๋ ๊ฒ ์ด๋ ค์ด ๊ฐ๋
์ด ์๋๋๋ค. ๊ธฐ๋ณธ์ ์ธ ๊ฐ๋
์ ์์์ ์ธ๊ธํ ๋ด์ฉ์ด ๋ค๋ผ๊ณ ์๊ฐํ๋๋ฐ์. (๋ฌผ๋ก ์ด์ธ์๋ ์ฌ๋ฌ๊ฐ์ง ์ค๋ช
์ ๋ถ์ ์ ์๊ฒ ์ง๋ง!) ์ ๋ค๋ฆญ์ ์ฌ์ฉํ๋ ค๊ณ ํ ๋์๋ ์ ๋ค๋ฆญ์ด ํ์ํ ํ์
๋๋ ๋ฉ์๋ ๋ฐ๋ก ๋ค์ ๊ดํธ() ์ฌ์ด์ placeholder(ex: T, V, U)๋ฅผ ์ ์ด์ฃผ์ด ์ฌ์ฉํฉ๋๋ค. ํ์
๋๋ ๋ฉ์๋ ์ด๋ฆ ์ฌ์ฉ๋ฒ์ ์ด๋ ต์ง ์์ต๋๋ค. ๋ฌธ์ ๋ ๋ด ์์ ์ด Generic์ ์ฌ์ฉ์ด ํ์ํ ๊ณณ์์ ์ ์ ํ ์ฌ์ฉ๊ฐ๋ฅํ๊ฐ ์ด๊ฒ์ด๊ฒ ์ฃ . Generic ์ฌ์ฉ ์์(1) - ์๋ฒ ํต์ ๊ฒฐ๊ณผ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํ Enum // NetworkResult.swif..