[Swfit] @unknown default / @frozen enum

์—ด๊ฑฐํ˜•์€ ๋‹ค์–‘ํ•œ ์ผ€์ด์Šค๋กœ ๋‚˜๋‰˜๋ฉฐ, ์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ถ„๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ๋•Œ ์ฃผ๋กœ switch๋ฌธ์„ ์‚ฌ์šฉํ•œ๋‹ค. Swift 5์—์„œ ์†Œ๊ฐœ๋œ @unknown default๋Š” ์—ด๊ฑฐํ˜•(enum) ์ฒ˜๋ฆฌ ์‹œ ์ƒˆ๋กœ์šด ์ผ€์ด์Šค๊ฐ€ ์ถ”๊ฐ€๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š” ์ผ€์ด์Šค๋ฅผ ๋Œ€๋น„ํ•˜๋„๋ก ์„ค๊ณ„๋œ ๊ธฐ๋Šฅ์ด๋‹ค. ๐Ÿ”Ž  1 . ์—ด๊ฑฐํ˜•(enum)์˜ ๋‘ ๊ฐ€์ง€ ์œ ํ˜•1) Frozen Enum (๊ณ ์ • ์—ด๊ฑฐํ˜•)Frozen Enum์€ ๋” ์ด์ƒ ์ƒˆ๋กœ์šด ์ผ€์ด์Šค๊ฐ€ ์ถ”๊ฐ€๋˜์ง€ ์•Š์„ ๊ฒƒ์ด ๋ณด์žฅ๋œ ์—ด๊ฑฐํ˜•์ด๋‹ค.์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์ •์˜ํ•œ ์—ด๊ฑฐํ˜• ๋Œ€๋ถ€๋ถ„์ด ์—ฌ๊ธฐ์— ํ•ด๋‹นํ•œ๋‹ค.์ด ์—ด๊ฑฐํ˜•์€ ์ถ”ํ›„์— ์ƒˆ๋กœ์šด ์ผ€์ด์Šค๊ฐ€ ์ถ”๊ฐ€๋˜์ง€ ์•Š์„ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋˜๋ฉฐ, ๋ชจ๋“  ์ผ€์ด์Šค๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค.enum Food { case chicken case pizza case hamburger}let my..

๐ŸŽ iOS/Swift 2024. 12. 4. 22:48

[Swift] Type Aliases(ํƒ€์ž… ๋ณ„์นญ)

๐Ÿ”Ž  1 . TypeAliases (ํƒ€์ž… ๋ณ„์นญ) TypeAliases๋Š” ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ํƒ€์ž…(ํด๋ž˜์Šค, ๊ตฌ์กฐ์ฒด, ์—ด๊ฑฐํ˜•, ํ•จ์ˆ˜, ํŠœํ”Œ ๋“ฑ)์„ ๋‹ค๋ฅธ ์ด๋ฆ„์œผ๋กœ ์ •์˜ํ•œ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๊ณ , ํŠน์ • ํƒ€์ž…์˜ ์˜๋ฏธ๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.typealias ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ •์˜ํ•œ๋‹ค.    ๐Ÿ”Ž  2. ๊ธฐ๋ณธ ๋ฌธ๋ฒ•    ๐Ÿ”Ž  3. ์‚ฌ์šฉ ์˜ˆ์‹œ1. ๊ฐ€๋…์„ฑ ํ–ฅ์ƒ์ฝ”๋“œ์—์„œ ํƒ€์ž…์˜ ์ด๋ฆ„์ด ๊ธธ๊ฑฐ๋‚˜ ๋ณต์žกํ•  ๋•Œ  typealias Point = (x: Int, y: Int) let orign: Point = (x: 0, y: 0)  2. ๋ณต์žกํ•œ ํƒ€์ž… ๋‹จ์ˆœํ™”์ œ๋„ค๋ฆญ ํƒ€์ž…์ด๋‚˜ ํ•จ์ˆ˜ ํƒ€์ž…๊ณผ ๊ฐ™์ด ๋ณต์žกํ•œ ํƒ€์ž…์„ ๊ฐ„๋‹จํ•œ ์ด๋ฆ„์œผ๋กœ ์ •์˜ํ•˜์—ฌ ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ฌ์šฉtypealias StringDictionary = [St..

๐ŸŽ iOS/Swift 2024. 11. 25. 02:10

[ Swift ] Error Handling

Swift์—์„œ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์€1. ์˜ต์…”๋„ : ์ž˜๋ชป๋œ ์ฒ˜๋ฆฌ์˜ ๊ฒฐ๊ณผ๋‚˜ ์‹คํ–‰ ๋„์ค‘ ์‹คํŒจํ–ˆ์„ ๋•Œ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ๋Œ€์‹  nil์„ ๋ฐ˜ํ™˜. 2. ์—๋Ÿฌ์ฒ˜๋ฆฌ ๊ตฌ๋ฌธ: ๋ฐ˜ํ™˜๊ฐ’ ํƒ€์ž…์ด๋‚˜ ์ฝ”๋“œ์˜ ํ๋ฆ„๊ณผ ์ƒ๊ด€ ์—†์ด ์˜ค๋ฅ˜๋ฅผ ๋˜์งˆ ์ˆ˜ ์žˆ๋Š” ๊ตฌ๋ฌธ.   ์—๋Ÿฌ์ฒ˜๋ฆฌ(Error Handlig)๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ์—๋Ÿฌ ์กฐ๊ฑด์—์„œ ์‘๋‹ตํ•˜๊ณ  ๋ณต๊ตฌํ•˜๋Š” ํ”„๋กœ์„ธ์Šค์ด๋‹ค. ์ผ๋ถ€ ์ž‘์—…์€ ํ•ญ์ƒ ์‹คํ–‰ ์™„๋ฃŒํ•œ๋‹ค๋Š” ๋ณด์žฅ์ด ๋˜์ง€ ์•Š๋Š”๋‹ค.์˜ต์…”๋„์„ ๊ฐ’์ด ์—†์Œ์„ ๋‚˜ํƒ€๋‚ด๋Š”๋ฐ ์‚ฌ์šฉ๋˜๋Š”๋ฐ ์‚ฌ์šฉ๋˜์ง€๋งŒ ์ž‘์—…์ด ์‹คํŒจํ•  ๊ฒฝ์šฐ ์—๋Ÿฌ ์›์ธ์„ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.    ๐Ÿ”Ž  1 . ์—๋Ÿฌ ํ‘œํ˜„๊ณผ ๋˜์ง€๊ธฐ(Representing and Throwing Errors) Swift์—์„œ ์—๋Ÿฌ๋Š” Error ํ”„๋กœํ† ์ฝœ์— ์ค€์ˆ˜ํ•˜๋Š” ํƒ€์ž…์˜ ๊ฐ’์œผ๋กœ ํ‘œํ˜„๋œ๋‹ค.์ด ํ”„๋กœํ† ์ฝœ์€ ๋น„์–ด์žˆ์œผ๋ฉฐ ์—๋Ÿฌ๋ฅผ ์ฒ˜๋ฆฌํ•˜ ๊ฒƒ์— ๋Œ€ํ•ด ์‚ฌ์šฉ๋ ..

๐ŸŽ iOS/Swift 2024. 11. 5. 23:39

[ RxSwift ] Relay๋ฅผ ์•Œ์•„๋ณด์ž

๐Ÿ”Ž  1 . Relay์ง€๋‚œ ๋ฒˆ์— ์ •๋ฆฌํ–ˆ๋˜ Subject์™€ ์—ฐ๊ณ„๋˜๋Š” ๋‚ด์šฉ์ด๋‹ค. Subject๋Š” ์˜ต์ €๋ฒ„๋ธ”์ด๋ฉด์„œ ์˜ต์ €๋ฒ„์ด๋‹ค.  Relay๋Š” Subject๊ฐ€ onCompleted, onError๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค์ง€ ์•Š๋Š”๋‹ค.์ฆ‰, ์—๋Ÿฌ์™€ ์™„๋ฃŒ ์ด๋ฒคํŠธ๋ฅผ ๋ฐฉ์ถœํ•˜์ง€ ์•Š๊ณ , ์ข…๋ฃŒ๋˜์ง€ ์•Š๋Š” ํŠน์ˆ˜ํ•œ Subject์ด๋‹ค.๊ตฌ๋…์ž๊ฐ€ dispose๋  ๋•Œ๊นŒ์ง€ ๊ณ„์† ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค. ๋”ฐ๋ผ์„œ Relay๋Š” ์ฃผ๋กœ UI ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.  Relay์— ์ด๋ฒคํŠธ๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” onNext()๊ฐ€ ์•„๋‹Œ accept ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.  Relay๋Š” RxCocoa์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์œผ๋กœ import RxCocoa๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.    ๐Ÿ”Ž  2. Relay์˜ ์ข…๋ฅ˜1) PublishRelay : ๊ตฌ๋… ์ดํ›„ ์ƒˆ๋กœ์šด ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ ๊ทธ..

๐ŸŽ iOS/RxSwift 2024. 10. 15. 02:49

[ Swift ] weak self๋ฅผ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์“ฐ๊ธฐ๋Š” ์“ฐ๋Š”๋ฐ ์ •ํ™•ํ•˜๊ฒŒ ์–ธ์ œ, ์–ด๋–จ ๋•Œ ์“ฐ๋Š”๊ฑฐ์ง€?

์ฝ”๋“œ๋ฆฌ๋ทฐ๋ฅผ ํ•˜๋ฉด์„œ ๊ทธ๋™์•ˆ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ๋ฐฉ์ง€๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ๋˜[ weak self ]์— ๋Œ€ํ•ด์„œ ๋‹ค์‹œ ํ•œ๋ฒˆ ์ƒ๊ฐํ•ด๋ณด๋Š” ์ข‹์€ ๊ธฐํšŒ๊ฐ€ ์ƒ๊ฒผ๋‹ค.    1. weak self๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๊ณ  ๊ฐ•ํ•œ ์ฐธ์กฐ ์‚ฌ์ดํด์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค. Swfit์˜ ARC๋Š” ๊ฐ์ฒด์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•˜๋ฉฐ, ๊ฐ์ฒด๊ฐ€ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š์œผ๋ฉด ์ž๋™์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•œ๋‹ค.  ํ•˜์ง€๋งŒ ๊ฐ์ฒด๋“ค์ด ์„œ๋กœ ๊ฐ•ํ•˜๊ฒŒ ์ฐธ์กฐํ•  ๊ฒฝ์šฐ, ARC๋Š” ์ด ์ฐธ์กฐ๋ฅผ ๋Š์ง€ ๋ชปํ•˜๊ณ  ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ•ด์ œ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.์ด๋Ÿฌํ•œ ์ƒํ™ฉ์„ ๊ฐ•ํ•œ ์ฐธ์กฐ ์‚ฌ์ดํด์ด๋ผ๊ณ  ํ•œ๋‹ค.    2. ๊ฐ•ํ•˜๊ฒŒ ์ฐธ์กฐํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ์–ด๋–ค ์ƒํ™ฉ์„ ๋งํ•˜๋Š”๊ฑฐ์ง€? ๊ฐ์ฒด๋“ค์ด ๊ฐ•ํ•˜๊ฒŒ ์ฐธ์กฐํ•œ๋‹ค๋Š” ๊ฒƒ์€, ํ•œ ๊ฐ์ฒด๊ฐ€ ๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์†Œ์œ ํ•˜๋ฉด์„œ๊ทธ ๊ฐ์ฒด๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ•ด์ฒด๋˜์ง€ ์•Š๋„๋ก ์ฐธ์กฐ ์นด์šดํŠธ๋ฅผ ์ฆ๊ฐ€์‹œ..

๐Ÿฆ„ Final/๐ŸŒŸ ์ตœ์ข…ํ”„๋กœ์ ํŠธ 2024. 10. 14. 00:29

[ RxSwift ] Subject๋ฅผ ์•Œ์•„๋ณด์ž

๐Ÿ”Ž  1 . SubjectSubject๋Š” ๋‹ค๋ฆฌ, ํ”„๋ก์‹œ ์—ญํ• ๋กœ ๋ฐ์ดํ„ฐ์˜ ์ค‘๊ณ„ ์—ญํ• ์„ ํ•˜๋Š” ๊ฐ์ฒด์ด๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์„œ ๊ตฌ๋…์ž๋“ค์—๊ฒŒ ์žฌ์ „์†กํ•˜๊ฑฐ๋‚˜ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ์ง์ ‘ ๋ฐœํ–‰ํ•œ๋‹ค.  ๋”ฐ๋ผ์„œ, Subject๋Š” ์˜ต์ €๋ฒ„์ด๋ฉด์„œ ๋™์‹œ์— ์˜ต์ €๋ฒ„๋ธ”์ด๋‹ค. Subject๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ๋‹ค๋ฅธ ์˜ต์ €๋ฒ„๋ธ”์„ ๊ตฌ๋…ํ•  ์ˆ˜ ์žˆ๊ณ (์˜ต์ €๋ฒ„ ์—ญํ• ), ๋™์‹œ์— ์˜ต์ €๋ฒ„๋ธ”์ด๋ฏ€๋กœ ๊ตฌ๋…์ž์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.  * ์˜ต์ €๋ฒ„๋ธ”์€ ๋‹ค๋ฅธ ์˜ต์ €๋ฒ„๋ธ”์„ ๊ตฌ๋…ํ•˜์ง€ ๋ชปํ•œ๋‹ค. ์˜ต์ €๋ฒ„๋„ ๋‹ค๋ฅธ ์˜ต์ €๋ฒ„์—๊ฒŒ ์ด๋ฒคํŠธ๋ฅผ ์ „๋‹ฌํ•˜์ง€ ๋ชปํ•œ๋‹ค.     ๐Ÿ”Ž  2. Subject์˜ ์ข…๋ฅ˜Subject๋Š” .next ์ด๋ฒคํŠธ๋ฅผ ๋ฐ›๊ณ , ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์‹ ํ•  ๋•Œ๋งˆ๋‹ค ๊ตฌ๋…์ž์—๊ฒŒ ๋ฐฉ์ถœํ•œ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ์˜ต์ €๋ฒ„๋ธ”์€ cold ์˜ต์ €๋ฒ„๋ธ”๋กœ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ตฌ๋…์ž๊ฐ€ ์ƒˆ๋กœ์šด ๊ฐ’์„ ๋ฐ›์„ ๋•Œ๋งˆ๋‹ค ์ฒ˜์Œ๋ถ€ํ„ฐ ์ด๋ฒคํŠธ๋ฅผ ๋‹ค..

๐ŸŽ iOS/RxSwift 2024. 10. 11. 04:21