๐ŸŽ iOS & Swift

ยท๐ŸŽ iOS & Swift
์•ˆ๋…•ํ•˜์„ธ์š”, ํƒœ๋ผ์ž…๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ธ€์€ ์ •๋ฆฌํ˜•ํƒœ๋กœ ์ž‘์„ฑํ•ด๋‘์–ด ์–ดํˆฌ๊ฐ€ ์กฐ๊ธˆ ๋”ฑ๋”ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.. ์ดํ•ด๋ถ€ํƒ๋“œ๋ ค์š” ๐Ÿฅฒ ์ด๋ฒˆ ๊ธ€์€ ์–ดํˆฌ๋„ ๋”ฑ๋”ฑํ•˜๊ณ  ์ค„๊ธ€ ํ˜•์‹์ด๋‹ค. ๋„ˆ๋ฌด ์–ด๋ ต๊ฒŒ ์ƒ๊ฐํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ๊ฐœ๋…์ด๋‹ค. ๋‹จ์ˆœํ•˜๊ฒŒ ๋งž์„œ๋ณด์ž. ์š”์•ฝ ํ”„๋กœํ† ์ฝœ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ œ๋„ค๋ฆญ 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๋Š” ์ƒˆ..
ยท๐ŸŽ iOS & Swift
์—ด์‹ฌํžˆ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์™€์„œ UI์— ๋ฟŒ๋ ค์ฃผ๋Š” ์ž‘์—… ์ค‘ ๋„์ €ํžˆ ๊ฐ€๋งŒํžˆ ์žˆ์„ ์ˆ˜ ์—†๋Š” ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ํ…์ŠคํŠธ ๊ฐ’ ์•ˆ์— html ํƒœ๊ทธ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์–ด ๋ผ๋ฒจ์— ๊ทธ๋Œ€๋กœ ํ‘œํ˜„๋˜๊ณ  ์žˆ๋˜ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํšจ๊ณผ๊ฐ€ ์ ์šฉ์ด ๋˜๊ฑฐ๋‚˜ ์‚ฌ๋ผ์ง€๊ธธ ์›ํ–ˆ๋Š”๋ฐ ์ œ๊ฑฐํ•˜๋Š” ๋ฐฉํ–ฅ ์ชฝ์œผ๋กœ ๊ฐ€๊ธฐ๋กœ ํ–ˆ์–ด์š”. ์ข‹์€ ์ต์Šคํ…์…˜์ด ์žˆ์–ด์„œ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ์™€์„œ ์‚ฌ์šฉํ•ด๋ดค๋Š”๋ฐ ๊น”๋”ํ•˜๊ฒŒ ์ ์šฉ์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ต์Šคํ…์…˜์„ ์ดํ•ดํ•˜๋Š” ์‹œ๊ฐ„๋„ ๊ฐ€์งˆ ํ•„์š”๊ฐ€ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์šฐ์„ ์€ ๊ทธ๋ƒฅ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์œผ๋กœ ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค~! ์ถ”๊ฐ€๋˜๋Š” ๋‚ด์šฉ์ด ์žˆ์œผ๋ฉด ์—…๋ฐ์ดํŠธ ํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค :) // ํ…์ŠคํŠธ์— ํฌํ•จ๋˜์–ด ์žˆ๋Š” HTMLํƒœ๊ทธ ์ œ๊ฑฐํ•˜๊ธฐ (์ต์Šคํ…์…˜) extension String { // html ํƒœ๊ทธ ์ œ๊ฑฐ + html entity๋“ค ๋””์ฝ”๋”ฉ. var htmlEscaped: String { guar..
ยท๐ŸŽ iOS & Swift
์•ˆ๋…•ํ•˜์„ธ์š”, ํƒœ๋ผ์ž…๋‹ˆ๋‹ค~ ์˜ค๋Š˜์€ Convenience initializer๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค! ์ด๋‹ˆ์…œ๋ผ์ด์ €๋Š” ํฌ๊ฒŒ 2๊ฐ€์ง€๋ฅผ ์‚ดํŽด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Designated initializer, Covenience initializer ์ฐจ๋ก€๋Œ€๋กœ ์ง€์ • ์ด๋‹ˆ์…œ๋ผ์ด์ €, ํŽธ์˜ ์ด๋‹ˆ์…œ๋ผ์ด์ €๋ผ๊ณ  ํ•ด์„ํ•ด๋ณผ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ง€์ • ์ด๋‹ˆ์…œ๋ผ์ด์ €๋Š” ํด๋ž˜์Šค(๊ตฌ์กฐ์ฒด)๋‚ด์˜ ๋ชจ๋“  ํ”„๋กœํผํ‹ฐ๊ฐ€ ์ดˆ๊ธฐํ™”๋  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ์ด๋‹ˆ์…œ๋ผ์ด์ €์ด๊ณ , ํŽธ์˜ ์ด๋‹ˆ์…œ๋ผ์ด์ €๋Š” ์ถ”๊ฐ€์ ์ธ ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋Š” ๋ณด์กฐ ์ด๋‹ˆ์…œ๋ผ์ด์ €์ž…๋‹ˆ๋‹ค. Designated init ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ ์ผ๋ถ€๋ฅผ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์„ค์ •ํ•ด์„œ Convenience init ์•ˆ์—์„œ Designated init ์„ ํ˜ธ์ถœํ•ด์„œ ์“ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ค‘์š”ํ•œ ํฌ์ธํŠธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. Convenience i..
ยท๐ŸŽ iOS & Swift
์•ˆ๋…•ํ•˜์„ธ์š”, ํƒœ๋ผ์ž…๋‹ˆ๋‹ค :) ์š”์ฆ˜์—๋Š” ํ•œ ๋‹จ๊ณ„ ๋” ์„ฑ์žฅํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋‹ค์‹œ ๊ธฐ์ดˆ๋ถ€ํ„ฐ ์ฐจ๊ทผ์ฐจ๊ทผ ๊ณต๋ถ€ํ•˜๋Š” ์ค‘์ž…๋‹ˆ๋‹ค. ํ™•์‹คํžˆ ๊ณต๋ถ€๋ฅผ ํ•˜๋‹ค๋ณด๋‹ˆ ์ด์ „์— ์•„๋ฌด ์ƒ๊ฐ์—†์ด ์ž‘์„ฑํ•˜๋˜ ์ฝ”๋“œ๋‚˜ ๊ฐœ๋…๋“ค์ด ๋ˆˆ์— ํ™• ๋„๋”๋ผ๊ตฌ์š”... ์•Œ๊ณ  ์‚ฌ์šฉํ•˜๋Š”๊ฑฐ๋ž‘ ๋ชจ๋ฅด๊ณ  ์‚ฌ์šฉํ•˜๋Š”๊ฑฐ๋ž‘์€ ์—ญ์‹œ ์—„์ฒญ๋‚œ ์ฐจ์ด์ด๊ธฐ ๋•Œ๋ฌธ์— ํ•ญ์ƒ ๊ธฐ์ดˆ๋ถ€ํ„ฐ ํƒ„ํƒ„ํžˆ ํ•ฉ์‹œ๋‹ค... (๊ทผ๋ฐ ๊ธฐ์ดˆ๋งŒ ๊ณต๋ถ€ํ•˜๋‹ค๋ณด๋ฉด ํฅ๋ฏธ๊ฐ€ ๋–จ์–ด์ง€๋Š”๊ฑด ์‚ฌ์‹ค... ๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ์ ์ ˆํžˆ ์š”๋ฆฌ์กฐ๋ฆฌ ์•„์‹œ์ฃ ...? ๐Ÿ˜‹) frame vs bounds ์˜ค๋Š˜์€ frame๊ณผ bounds์— ๋Œ€ํ•ด ์ •๋ฆฌํ•  ๊ฑฐ์˜ˆ์š”. ์•„ ๊ทผ๋ฐ, ์š”์•ฝ๋ฒ„์ „์ด๋‹ˆ๊นŒ ์ž์„ธํ•˜์ง€ ์•Š์•„๋„ ์ดํ•ดํ•ด์ฃผ์„ธ์š”... ๊ผผ๊ผผํ•œ ์„ค๋ช…๋ฒ„์ „์€ ๋‚˜์ค‘์—... ์šฐ์„  ๋‹ค ์ดํ•ดํ•˜๊ณ  ๋‚˜์„œ ์ •๋ฆฌ๋ฅผ ํ•ด๋ณด๋ฉด frame๊ณผ bounds์˜ ์ฐจ์ด๋Š” ๋‹ค์Œ 3๊ฐ€์ง€๋กœ ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ขŒํ‘œ๊ณ„์— ๋Œ€ํ•œ ์ฐจ..
ยท๐ŸŽ iOS & Swift
์šฐ๋ฆฌ๋Š” ์˜ต์…”๋„์— ๋Œ€ํ•ด ๋ฌผ์—ˆ์„ ๋•Œ, ์–ผ๋งˆ๋‚˜ ์ž˜ ๋Œ€๋‹ตํ•  ์ˆ˜ ์žˆ์„๊นŒ? Summary ์˜ต์…”๋„์€ ๋ณ€์ˆ˜์— ๊ฐ’์ด ์žˆ์„ ์ˆ˜๋„ ์žˆ๊ณ , ์—†์„ ์ˆ˜๋„ ์žˆ๋Š” ์ƒํƒœ(nil)๋ฅผ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด Swift์— ๋„์ž…๋œ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค. ์˜ต์…”๋„์€ Enum ํ˜•ํƒœ๋กœ ์ •์˜๋˜์–ด ์žˆ๊ณ , ๊ฐ’์˜ ์žˆ๊ณ  ์—†์Œ์„ ๊ฐ Case๋กœ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ต์…”๋„๋กœ ํ‘œํ˜„๋œ ๊ฐ’์— ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” Forced Unwrapping(๊ฐ•์ œ ์–ธ๋ž˜ํ•‘), Optional Binding(์˜ต์…”๋„ ๋ฐ”์ธ๋”ฉ), Nil-Coalescing Operator(Nil๋ณ‘ํ•ฉ์—ฐ์‚ฐ์ž)๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ต์…”๋„ ์ฒด์ด๋‹์„ ํ†ตํ•ด์„œ ์˜ต์…”๋„ ๋ฐ”์ธ๋”ฉ์œผ๋กœ ํ‘œํ˜„๋œ ์ฝ”๋“œ๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ต์…”๋„(Optional) ๋„ˆ๋ž€ ๋…€์„ ์˜ต์…”๋„์˜ ์˜๋ฏธ ์ž ์šฐ๋ฆฌ๋Š” ๊ทผ๋ณธ์žˆ๋Š” ๊ฐœ๋ฐœ์ž์ด๊ธฐ ๋•Œ๋ฌธ์— Apple ๊ณต์‹ ๋ฌธ์„œ๋ฅผ ๋ณด๋„๋ก ํ•˜์ฃ . (..
ยท๐ŸŽ iOS & Swift
์•ˆ๋…•ํ•˜์„ธ์š”~ ์ด์ œ๋Š” ์ด๋Ÿฐ ์ž‘์€ ์ด์Šˆ๋“ค๋„ ์ž˜ ๊ธฐ๋กํ•ด๋†“์œผ๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€๋Š” ์ €์ฒ˜๋Ÿผ ์ด์Šˆ๋ฅผ ๊ฒช๊ณ  ์ฐพ์œผ๋ ค๊ณ  ํ• ํ…Œ๋‹ˆ๊นŒ์š”! ๋„์›€์ด ์กฐ๊ธˆ์ด๋ผ๋„ ๋˜๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค. ํ˜น์‹œ Info.plist๋ฅผ ์˜ฎ๊ธฐ๊ณ  ๋‚˜๋‹ˆ๊นŒ ์ •์ƒ์ ์œผ๋กœ ๋นŒ๋“œ๊ฐ€ ์•ˆ๋˜์‹œ๋‚˜์š”? ๊ทธ๋Ÿผ ๊ฑฐ์˜ 90% ํ™•๋ฅ ๋กœ ์ด ์ด์Šˆ์ผ ๊ฒƒ ๊ฐ™์•„์š”. (์ข€ ๊ณผ์žฅ๋˜๊ธฐ๋Š” ํ–ˆ์ง€๋งŒ...ใ…Žใ…Ž) ์ด์Šˆ ์ƒํ™ฉ ๋ณดํ†ต ์ฒ˜์Œ ํ”„๋กœ์ ํŠธ๋ฅผ ์„ธํŒ…ํ•  ๋•Œ, Info.plist์˜ ์œ„์น˜๋ฅผ ์˜ฎ๊ฒผ์„ ๋•Œ ํ•ด๋‹น ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์›๋ž˜ Info.plist๋Š” ํ”„๋กœ์ ํŠธ ๋ฐ”๋กœ ๋ฐ‘์— ์œ„์น˜ํ•ด์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋‹ค๋ฅธ ํด๋”๋กœ ์˜ฎ๊ธฐ๊ฑฐ๋‚˜ ์œ„์น˜๋ฅผ ์˜ฎ๊ฒผ์„ ๋•Œ ๊ทธ ๊ฒฝ๋กœ๋ฅผ ๋‹ค์‹œ ์ง€์ •ํ•ด์ฃผ์–ด์•ผ ํ•ด์š”. Showing All Messages Build input file cannot be found: '/Users/taehy.k/Desktop/MVVMSamp..
ยท๐ŸŽ iOS & Swift
Generic(์ œ๋„ค๋ฆญ) Generic์€ ์ค‘๋ณต์„ ํ”ผํ•˜๋ฉด์„œ ๋งค์šฐ ์œ ์—ฐํ•˜๊ณ  ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ•จ์ˆ˜์™€ ํƒ€์ž…์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค. ์‚ฌ์‹ค ์ด๋ก ์œผ๋กœ์จ Generic์€ ๊ทธ๋ ‡๊ฒŒ ์–ด๋ ค์šด ๊ฐœ๋…์ด ์•„๋‹™๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์ธ ๊ฐœ๋…์€ ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๋‚ด์šฉ์ด ๋‹ค๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š”๋ฐ์š”. (๋ฌผ๋ก  ์ด์™ธ์—๋„ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์„ค๋ช…์€ ๋ถ™์„ ์ˆ˜ ์žˆ๊ฒ ์ง€๋งŒ!) ์ œ๋„ค๋ฆญ์„ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•  ๋•Œ์—๋Š” ์ œ๋„ค๋ฆญ์ด ํ•„์š”ํ•œ ํƒ€์ž… ๋˜๋Š” ๋ฉ”์„œ๋“œ ๋ฐ”๋กœ ๋’ค์— ๊ด„ํ˜ธ() ์‚ฌ์ด์— placeholder(ex: T, V, U)๋ฅผ ์ ์–ด์ฃผ์–ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํƒ€์ž… ๋˜๋Š” ๋ฉ”์„œ๋“œ ์ด๋ฆ„ ์‚ฌ์šฉ๋ฒ•์€ ์–ด๋ ต์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” ๋‚ด ์ž์‹ ์ด Generic์„ ์‚ฌ์šฉ์ด ํ•„์š”ํ•œ ๊ณณ์—์„œ ์ ์ ˆํžˆ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ๊ฐ€ ์ด๊ฒƒ์ด๊ฒ ์ฃ . Generic ์‚ฌ์šฉ ์˜ˆ์‹œ(1) - ์„œ๋ฒ„ ํ†ต์‹  ๊ฒฐ๊ณผ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ Enum // NetworkResult.swif..
taeeekki
'๐ŸŽ iOS & Swift' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก (7 Page)