[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

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

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

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

[ Rxswift ] Observable์„ ์•Œ์•„๋ณด์ž

๐Ÿ”Ž  1 . Observable = Observable sequence = sequenceRsSwift์—์„œ ๋งํ•˜๋Š” Observable๊ณผ sequence๋Š” ์‹œ๊ฐ„์— ๋”ฐ๋ผ ์ˆœ์ฐจ์ ์œผ๋กœ ๋ฐœ์ƒํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ํ๋ฆ„์„ ๋งํ•œ๋‹ค. Observable: RxSwift์˜ ํ•ต์‹ฌ ๊ฐœ๋… ์ค‘ ํ•˜๋‚˜๋กœ, ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ๊ฐ’์ด๋‚˜ ์ด๋ฒคํŠธ๋ฅผ ๋ฐฉ์ถœํ•˜๋Š” ๋ฐ์ดํ„ฐ ํ๋ฆ„(์ŠคํŠธ๋ฆผ)์„ ๋‚˜ํƒ€๋ƒ„. ์ด ์ŠคํŠธ๋ฆผ์„ ๊ตฌ๋…ํ•จ์œผ๋กœ์จ ๊ฐ’์ด ๋ณ€๊ฒฝ๋  ๋•Œ ๋งˆ๋‹ค ํ•ด๋‹น ๊ฐ’์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์Œ.Sequence: ์ผ๋ฐ˜์ ์œผ๋กœ Swift์—์„œ๋Š” ๋ฐ˜๋ณต๊ฐ€๋Šฅํ•œ ๊ฐ’์˜ ์ง‘ํ•ฉ(์˜ˆ: ๋ฐฐ์—ด, ๋ฆฌ์ŠคํŠธ ๋“ฑ)์„ ์˜๋ฏธํ•จ. RxSwift์—์„œ์˜ ์‹œํ€€์Šค๋Š” ๊ฐ’๋“ค์ด ์‹œ๊ฐ„์ด ํ๋ฆ„์— ๋”ฐ๋ผ ํ•˜๋‚˜์”ฉ ๋‚˜์˜ค๋Š” ๋น„๋™๊ธฐ์ ์ธ ์‹œํ€€์Šค๋ฅผ ์˜๋ฏธํ•จ. ์ด ์ŠคํŠธ๋ฆผ์€ ๋ฐฐ์—ด์ฒ˜๋Ÿผ ์—ฌ๋Ÿฌ ๊ฐ’์„ ๋ฐฉ์ถœํ•˜์ง€๋งŒ, ๊ทธ ๊ฐ’๋“ค์€ ์‹œ๊ฐ„์— ๋”ฐ๋ผ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ „๋‹ฌ๋จ. ..

๐ŸŽ iOS/RxSwift 2024. 10. 4. 01:19

Alert๊ณผ ๋™๊ธฐ/๋น„๋™๊ธฐ ๊ฐœ๋…

showAlert ๋ฉ”์„œ๋“œ๋Š” ๋น„๋™๊ธฐ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. ์ •ํ™•ํžˆ ๋งํ•˜๋ฉด, UIAlertController๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•Œ๋ฆผ์„ ๋„์šฐ๋Š” ์ž‘์—…์€ ๋น„๋™๊ธฐ์ ์œผ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.  ๋น„๋™๊ธฐ ๋™์ž‘์˜ ๊ฐœ๋…UI ๊ด€๋ จ ์ž‘์—…์˜ ๋น„๋™๊ธฐ์„ฑ:UIAlertController๋ฅผ ํ™”๋ฉด์— ํ‘œ์‹œํ•˜๋Š” ์ž‘์—…์€ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” present(_:animated:completion:) ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ๋œ ํ›„, ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค(UI)๊ฐ€ ์—…๋ฐ์ดํŠธ๋˜๋Š” ๋ฐฉ์‹๊ณผ ๊ด€๋ จ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, present(_:animated:completion:) ํ˜ธ์ถœ ํ›„ UI๊ฐ€ ์—…๋ฐ์ดํŠธ๋  ๋•Œ๊นŒ์ง€ ์ฝ”๋“œ ์‹คํ–‰์ด ์ผ์‹œ ์ค‘๋‹จ๋˜์ง€ ์•Š๊ณ  ๊ณ„์† ์ง„ํ–‰๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋น„๋™๊ธฐ ๋ฉ”์„œ๋“œ์™€ Completion Handler:UIAlertController์˜ present(_:animated:compl..

๐ŸŽ iOS/Swift 2024. 8. 29. 19:01

UITextField์™€ ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ ํŒจํ„ด

UITextFieldUITextField๋Š” ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ํ…์ŠคํŠธ ์ž…๋ ฅ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ์ธํ„ฐํŽ˜์ด์Šค ์š”์†Œ์ด๊ณ , ๋ธ๋ฆฌ๊ฒŒ์ดํŠธ ํŒจํ„ด์€ UITextField์˜ ๋™์ž‘์„ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•˜๊ณ  ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค. textField.delegate = self  -> ํ…์ŠคํŠธํ•„๋“œ์˜ ๋Œ€๋ฆฌ์ž๊ฐ€ ๋ทฐ์ปจ์ด ๋จ. ํ…์ŠคํŠธํ•„๋“œ์—์„œ ์ผ์–ด๋‚˜๋Š” ์ผ ์ „๋‹ฌ ๋ฐ›์Œํ…์ŠคํŠธํ•„๋“œ์—์„œ ์–ด๋–ค ์ผ์ด ๋ฐœ์ƒํ•˜๋ฉด ๊ทธ ์‹œ์ ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•  ํ…Œ๋‹ˆ ๋ฉ”์„œ๋“œ๋ฅผ ์ฑ„ํƒํ•˜๊ณ  ๊ตฌํ˜„ํ•˜๋ผ.  textField.becomeFirstResponder() //ํ‚ค๋ณด๋“œ ์˜ฌ๋ผ์˜ดtextField.resignFirstResponder() //ํ‚ค๋ณด๋“œ ๋‚ด๋ ค๊ฐ  ์ฃผ์š” UITextField Delegate ๋ฉ”์„œ๋“œ์™€ ์‚ฌ์šฉ ์˜ˆ์ œtextFieldShouldBeginEditing(_:)ํ…์ŠคํŠธ ํ•„๋“œ..

๐ŸŽ iOS/Swift 2024. 8. 28. 23:36