๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
728x90
๋ฐ˜์‘ํ˜•

๐Ÿ“Œ Language37

[RxSwift] Subject๋ž€? ์•ˆ๋…•ํ•˜์„ธ์š” Foma ์ž…๋‹ˆ๋‹ค. ์˜ค๋Š˜์€ RxSwift ์—์„œ ์•„์ฃผ ํฐ ๋น„์ค‘์„ ์ฐจ์ง€ํ•˜๋Š” Subject์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค!! ๋ฐ”๋กœ ์‹œ์ž‘ํ• ๊ฒŒ์š”~ Subject๋ž€? ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€์— ๋‚˜์™€์žˆ๋Š” ๋‚ด์šฉ์„ ํ•ด์„ํ•˜๋ฉด "Subject๋Š” Observable๊ณผ Observable ์—ญํ• ์„ ๋ชจ๋‘ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. Observer์ด๊ธฐ ๋•Œ๋ฌธ์— ํ•˜๋‚˜ ์ด์ƒ์˜ Observable์„ ๊ตฌ๋… ํ•  ์ˆ˜ ์žˆ๊ณ , Observable์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ด€์ฐฐํ•œ ํ•ญ๋ชฉ์„ ์žฌ๋ฐœ์†กํ•˜์—ฌ ํ†ต๊ณผ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ƒˆ ํ•ญ๋ชฉ์„ ๋‚ด๋ณด๋‚ผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค." ๋ผ๊ณ  ๋˜์–ด์žˆ๋Š”๋ฐ์š”. ์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด ์˜ต์ €๋ฒ„๋ธ”๊ณผ ์˜ต์ €๋ฒ„์˜ ์—ญํ•  ๋‘˜ ๋‹ค ํ•œ๋‹ค ๋ผ๊ณ  ์ดํ•ดํ•˜์‹œ๋ฉด ๋  ๊ฑฐ ๊ฐ™์Šต๋‹ˆ๋‹ค! ๋จผ์ € ์˜ต์ €๋ฒ„๋ธ”์€ ๋ญ˜๊นŒ์š”? ์ง€๋‚œ ์‹œ๊ฐ„์— "์˜ต์ €๋ฒ„๋ธ”์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐฉ์ถœํ•˜๋Š” ํ๋ฆ„์ด๋‹ค."๋ผ๊ณ  ์„ค๋ช…๋“œ๋ ธ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์˜ต์ €๋ฒ„๋Š” ๋ฌด์—‡์ผ๊นŒ์š”? ๋‹น์—ฐ.. 2021. 1. 28.
[RxSwift] Operator๋ž€? ์•ˆ๋…•ํ•˜์„ธ์š” Foma ์ž…๋‹ˆ๋‹ค! RxSwift ๋Š” ์‰ฝ๊ฒŒ Observable์„ ์ƒ์„ฑํ•˜๊ณ  ๋ณ€ํ˜•ํ•˜๊ณ  ํ•ฉ์น˜๋Š” ๋“ฑ ๋‹ค์–‘ํ•˜๊ฒŒ ์—ฐ์‚ฐ์„ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” Operator๋ผ๋Š” ๊ฒƒ์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. ์˜ค๋Š˜์€ ๋‹ค์–‘ํ•œ Operator๋ฅผ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค! Create ๊ฐ€์žฅ ๋จผ์ € ์•Œ์•„๋ณผ๊ฑด Observable์„ ์ƒ์„ฑํ•˜๋Š” Operator ์ž…๋‹ˆ๋‹ค. 1. create ๊ฐ€์žฅ ๊ธฐ๋ณธ์œผ๋กœ ์˜ต์ €๋ฒ„๋ธ”์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. 2. just just๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํŠน์ •ํ•ญ๋ชฉ์„ ํ•˜๋‚˜๋งŒ ๊ฐ„๋‹จํ•˜๊ณ  ์‰ฝ๊ฒŒ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 3. from From์€ just์™€ ๊ฐ™์ด ๊ฐ„๋‹จํ•˜๊ณ  ์‰ฝ๊ฒŒ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ just๋Š” ํ•œ๋ฒˆ์— ๋ชจ๋“  ๊ฒฐ๊ณผ๋ฅผ ๋ฐฉ์ถœํ•˜๋Š” ๋ฐ˜๋ฉด from์€ ๊ฒฐ๊ณผ๋ฅผ ํ•˜๋‚˜์”ฉ ๋ฐฉ์ถœํ•ฉ๋‹ˆ๋‹ค. 4.of of๋Š” just์ฒ˜๋Ÿผ [1,2,3] ๋ฐฐ์—ด์„ ํ•œ๋ฒˆ์— ๋ฐฉ์ถœํ•  ์ˆ˜๋„ ์žˆ๊ณ .. 2021. 1. 19.
[RxSwift] Observable ๊ฐ„๋‹จํ•˜๊ฒŒ ์•Œ์•„๋ณด๊ธฐ ์•ˆ๋…•ํ•˜์„ธ์š” Foma ์ž…๋‹ˆ๋‹ค! ์ €๋ฒˆ ์‹œ๊ฐ„์— Reactive X๋Š” "์˜ต์ €๋ฒ„๋ธ” ํ๋ฆ„์„ ์‚ฌ์šฉํ•˜๋Š” ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์œ„ํ•œ API" ๋ผ๊ณ  ์†Œ๊ฐœ๋“œ๋ ธ์Šต๋‹ˆ๋‹ค. ์†Œ๊ฐœ์— ๋‚˜์™€ ์žˆ๋‹ค์‹œํ”ผ Observable ์ด๋ผ๋Š” ๊ฐœ๋…์€ ๊ฐ€์žฅ ํ•ต์‹ฌ์ด ๋˜๋Š” ๊ฒƒ์ธ๋ฐ์š”. ๊ทธ๋ž˜์„œ ์˜ค๋Š˜์€ Observable์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. Observer Pattern ๋จผ์ € Reactive X๋Š” ์˜ต์ €๋ฒ„ ํŒจํ„ด์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์˜ต์ €๋ฒ„ ํŒจํ„ด์ด๋ž€ Observable์„ Observer๊ฐ€ ๊ตฌ๋…ํ•˜๊ณ  Observable์ด ์–ด๋–ค ์ƒํƒœ๋ฅผ ๋ฐฉ์ถœํ•˜์˜€์„ ๋•Œ Observer์—๊ฒŒ ์•Œ๋ฆผ์„ ๋ณด๋‚ด๋Š” ๊ฒƒ์ด์ฃ . ์ด๊ฒƒ์€ ์œ ํŠœ๋ฒ„๊ฐ€ ๊ตฌ๋…์ž์—๊ฒŒ ์•Œ๋ฆผ์„ ๋ณด๋‚ด๋Š” ๋ฐฉ์‹์œผ๋กœ ์ดํ•ดํ•˜์‹œ๋ฉด ํŽธํ• ๊ฑฐ๊ฐ™์•„์š”. Observable์ด ์•Œ๋ฆผ์„ ๋ณด๋‚ด๋Š” ๋ฐฉ์‹์€ 3๊ฐ€์ง€๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค. OnNext -> ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„๋•Œ OnEr.. 2020. 12. 29.
[RxSwift] Disposable๊ณผ DisposeBag ์•ˆ๋…•ํ•˜์„ธ์š” Foma ์ž…๋‹ˆ๋‹ค. ์˜ค๋Š˜์€ RxSwift์—์„œ ๊ฐ€์žฅ ๊ธฐ์ดˆ๊ฐ€๋˜๋Š” Disposable๊ณผ DisposeBag์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ฐ”๋กœ ์‹œ์ž‘ํ• ๊ฒŒ์š”~ Disposable ๋จผ์ € dispose์˜ ์‚ฌ์ „์  ์˜๋ฏธ๋Š” ๋ญ˜๊นŒ์š”? ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์˜๋ฏธ๊ฐ€ ์žˆ์ง€๋งŒ Rx์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์˜๋ฏธ๋Š” "์ฒ˜๋ฆฌํ•˜๋‹ค" ๋ผ๋Š” ๋œป์ด์—์š”. ("์ทจ์†Œํ•˜๋‹ค" ๋ผ๊ณ  ๋ณด์…”๋„ ๋ ๊ฑฐ๊ฐ™์•„์š”) ๊ทธ๋ ‡๋‹ค๋ฉด disposable์€ "์ฒ˜๋ฆฌํ• ์ˆ˜์žˆ๋Š”" ์ด๊ฒ ์ฃ ? ๋งŒ์•ฝ ์–ด๋–ค ์ž‘์—…์ด ์‹คํ–‰๋˜๋Š”๋ฐ ์ด๊ฒŒ ๋„ˆ๋ฌด ์˜ค๋ž˜๊ฑธ๋ฆฌ๊ฑฐ๋‚˜ ์•„๋‹ˆ๋ฉด ์ค‘๊ฐ„์— ์ทจ์†Œํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ์ค‘์ธ ์ž‘์—…์„ ๋ฉˆ์ถฐ์•ผํ•˜๊ฒ ์ฃ ? ๋งŒ์•ฝ Rx๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  GCD๋กœ ๋น„๋™๊ธฐ์ž‘์—…์„ ๊ตฌํ˜„ํ–ˆ๋‹ค๋ฉด ์ค‘๊ฐ„์— ์ทจ์†Œํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ณ  ๋งŒ์•ฝ ์ทจ์†Œํ•ด์•ผํ•œ๋‹ค๋ฉด OperationQueue๋ฅผ ์‚ฌ์šฉํ•ด์„œ cancelํ•ด์ค˜์•ผ ํ• ๊ฑฐ์—์š”. Rx๋Š” cancel ๋Œ€์‹  .. 2020. 12. 26.
[Swift] @discardableResult๋ž€? ์•ˆ๋…•ํ•˜์„ธ์š” Foma ์ž…๋‹ˆ๋‹ค! ์š”์ฆ˜ RxSwift ๋ฅผ ๊ณต๋ถ€ํ•˜๊ณ ์žˆ๋Š”๋ฐ ํ•จ์ˆ˜ ์œ—๋ถ€๋ถ„(?)์— @discardableResult ๋ผ๊ณ  ์“ฐ์—ฌ์žˆ๊ธธ๋ž˜ ์ด๊ฑด ๋ฌด์Šจ ์—ญํ• ์„ ํ•˜์ง€? ํ•˜๊ณ  ์ฐพ์•„๋ณธ ๊ฒฐ๊ณผ๋ฅผ ๊ณต์œ ํ•˜๊ณ  ์‹ถ์–ด์„œ ๊ธ€์„ ์ž‘์„ฑํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค! @discardableResult๋ž€? Swift ๊ณต์‹์‚ฌ์ดํŠธ์—์„  ์•„๋ž˜์™€ ๊ฐ™์ด ์ •์˜๋˜์–ด ์žˆ๋Š”๋ฐ์—ฌ ํ•ด์„ํ•ด๋ณด์ž๋ฉด (๊ตฌ๊ธ€๋ฒˆ์—ญ๊ธฐ๋กœ...) "๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜ ๋˜๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ๊ฒฐ๊ณผ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ํ˜ธ์ถœ๋  ๋•Œ ์ปดํŒŒ์ผ๋Ÿฌ ๊ฒฝ๊ณ ๋ฅผ ํ‘œ์‹œํ•˜์ง€ ์•Š์œผ๋ ค๋ฉด ํ•จ์ˆ˜ ๋˜๋Š” ๋ฉ”์„œ๋“œ ์„ ์–ธ์— ์ด ์†์„ฑ์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค." ๋ผ๊ณ  ๋˜์–ด์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ๊ฐ€ ๊ฒฐ๊ณผ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ์ปดํŒŒ์ผ๋Ÿฌ ๊ฒฝ๊ณ ๋ฅผ ํ‘œ์‹œํ•˜์ง€ ์•Š๊ฒŒ ํ•ด์ค€๋‹ค๋„ค์š”. ์˜ˆ์ œ๋กœ ์„ค๋ช…๋“œ๋ฆฌ๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด Boolean๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” something() ํ•จ์ˆ˜๋ฅผ.. 2020. 12. 24.
[Swift] toggle์„ ์ด์šฉํ•˜์—ฌ Bool๊ฐ’ ์‰ฝ๊ฒŒ ๋ฐ”๊พธ๊ธฐ ์•ˆ๋…•ํ•˜์„ธ์š” Foma ์ž…๋‹ˆ๋‹ค!! ์˜ค๋Š˜ ์•Œ์•„๋ณผ ๊ฑด toggle()์ด๋ผ๋Š” ๋ฉ”์†Œ๋“œ์ž…๋‹ˆ๋‹ค. ํ‰์†Œ์— Boolean๊ฐ’์„ ์‚ฌ์šฉํ•˜๋ฉด true์ผ๋•Œ false์ผ๋•Œ๋ฅผ ์•Œ์•„๋‚ด์–ด ์‚ฌ์šฉํ•˜๊ณค ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ toggle() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ˜„์žฌ Boolean๊ฐ’์„ ๋ฐ˜๋Œ€๋กœ ๋ฐ”๊พธ์–ด์ค๋‹ˆ๋‹ค. ๊ณ ๋กœ ํ˜„์žฌ์˜ Boolean๊ฐ’์„ ๋ชฐ๋ผ๋„ ๋ฐ˜๋Œ€๋กœ ๋ฐ”๊ฟ”์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์•„์ฃผ ์œ ์šฉํ•œ ๊ฒƒ์ด์ฃ !! ์˜ˆ์‹œ์™€ ํ•จ๊ป˜ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ํ‰์†Œ ์•„๋ž˜์™€ ๊ฐ™์ด boolean๊ฐ’์„ ์•Œ์•„๋‚ผ ๋• if๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ˜๋Œ€๋กœ ๋ฐ”๊พธ๊ณค ํ–ˆ๋Š”๋ฐ์š” ์•„๋ž˜์™€ ๊ฐ™์ด toggle()์„ ์‚ฌ์šฉํ•˜๋ฉด boolean๊ฐ’์ด ์•Œ์•„์„œ ๋ฐ˜๋Œ€๋กœ ๋ฐ”๋€Œ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค!!! 2020. 11. 13.
[RxSwift] RxSwift๋ฅผ ํ•ด์•ผํ•˜๋Š” ์ด์œ  ํ‰์†Œ์— MVVMํŒจํ„ด์ด๋‚˜ Rx์™€ ๊ด€๋ จ๋œ ๊ฒƒ๋“ค์ด ๋งŽ์ด ๋ณด์˜€๊ณ  ๊ผญ ๋ฐฐ์›Œ์•ผํ•œ๋‹ค๋Š” ๋ง๋“ค์ด ๋งŽ์•˜์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์™œ ๋ฐฐ์›Œ์•ผํ•˜๋Š”์ง€์— ๋Œ€ํ•ด์„  ์•Œ์ง€ ๋ชปํ–ˆ๋Š”๋ฐ ์ด๋ฒˆ ๊ธฐํšŒ์— ์™œ ํ•ด์•ผํ•˜๋Š”๊ฐ€ Rx๊ฐ€ ๋ฌด์—‡์ธ๊ฐ€์— ๋Œ€ํ•ด์„œ ์ฐพ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค. ๋จผ์ € ํ•ด์•ผํ•˜๋Š” ์ด์œ ๋ฅผ ์•Œ๊ธฐ์ „์— RxSwift๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์ฐพ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค. RxSwift๋ž€ Reactive eXtensions + Swift์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด Rx๋Š” ๋ฌด์—‡์ธ๊ฐ€? Rx๋Š” Reactive Programming ๋ฐ˜์‘ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์œผ๋กœ ๋˜์–ด์žˆ๋Š” API์ž…๋‹ˆ๋‹ค. ๋ฐ˜์‘ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ๋ณ€ํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ์— ์‰ฝ๊ฒŒ ๋Œ€์ฒ˜ํ•  ์ˆ˜ ์žˆ๊ณ  ์ด๋ฒคํŠธ๋“ค์˜ ์ˆœ์„œ,์žฌ์‚ฌ์šฉ์„ฑ์„ ํ–ฅ์ƒ ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, ๋น„๋™๊ธฐ์‹(์—ฌ๋Ÿฌ ์ž‘์—…์„ ๋™์‹œ์— ์ง„ํ–‰) ํ™œ๋™์„ ์‰ฝ๊ณ  ์•ˆ์ „ํ•˜๊ฒŒ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ˜์‘ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ Functional Pro.. 2020. 9. 3.
[Swift] ๋”•์…”๋„ˆ๋ฆฌ ๋ฐธ๋ฅ˜๊ฐ’์œผ๋กœ ํ‚ค๊ฐ’ ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌํ•˜๊ธฐ(Sort Dictionary keys by values) ํ‰์†Œ์— ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ์ด์šฉํ•˜๋ฉด์„œ ๋ฐธ๋ฅ˜๊ฐ’์œผ๋กœ ํ‚ค๊ฐ’์„ ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌํ•ด์•ผ ํ•  ๋•Œ๊ฐ€ ์ •๋ง ๋งŽ์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์—ด์‹ฌํžˆ ๊ตฌ๊ธ€๋ง ํ•ด๋ณธ ๊ฒฐ๊ณผ ๋ฐฉ๋ฒ•์„ ์ฐพ๊ฒŒ๋˜์–ด ์ •๋ฆฌ๋ฅผ ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋จผ์ € ๋”•์…”๋„ˆ๋ฆฌ ์•ˆ์˜ ๊ฐ’์€ [์˜ํ™”์ด๋ฆ„:ํ‰์ ]๋กœ ๋งŒ๋“ค์–ด ์ฃผ๊ณ  ํ‰์  ์ˆœ์œผ๋กœ ์˜ํ™”๋ฅผ ์ •๋ ฌํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์˜ํ™”๋Š” ์งฑ๊ตฌ๋Š”๋ชป๋ง๋ ค,๋‹ค๋งŒ์•…์—์„œ๊ตฌํ•˜์†Œ์„œ,๊ฐ•์ฒ ๋น„2,์˜ค์ผ€์ด๋งˆ๋‹ด,๋‚˜์˜์†Œ๋…€์‹œ๋Œ€ ์ด๋ ‡๊ฒŒ 5๊ฐ€์ง€๋กœ ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด์ฃผ๊ณ  => let movies = ["์งฑ๊ตฌ๋Š”๋ชป๋ง๋ ค","๋‹ค๋งŒ์•…์—์„œ๊ตฌํ•˜์†Œ์„œ","๊ฐ•์ฒ ๋น„2","์˜ค์ผ€์ด๋งˆ๋‹ด","๋‚˜์˜์†Œ๋…€์‹œ๋Œ€"] ํ‰์ ์€ ๊ฐ๊ฐ 9.40,8.62,8.04,8.18,9.30 8์›” 25์ผ ๊ธฐ์ค€ ๋„ค์ด๋ฒ„ ํ‰์ ์œผ๋กœ ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด์ฃผ๊ฒ ์Šต๋‹ˆ๋‹ค. => let rates = [9.40,8.62,8.04,8.18,9.30] ์˜ํ™”๋ฅผ ํ‚ค๊ฐ’์œผ๋กœ ํ‰์ ์„ ๋ฐธ๋ฅ˜๊ฐ’์œผ๋กœ ํ•ด์„œ ๋”•์…”.. 2020. 8. 25.
[Swift] Set์ง‘ํ•ฉ์˜ index์œ„์น˜ ์•Œ์•„๋‚ด๊ธฐ Set์ง‘ํ•ฉ์€ ๋ฐฐ์—ด์ฒ˜๋Ÿผ ์ธ๋ฑ์Šค๋กœ ๊ฐ’์„ ์ฐพ์•„๋‚ผ ์ˆ˜๊ฐ€ ์—†์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ฐพ์•„๋ณธ ๊ฒฐ๊ณผ indices๋ฅผ ์ด์šฉํ•˜๋ฉด Set์•ˆ์˜ ๊ฐ’์˜ index๋ฅผ ์ฐพ์•„๋‚ผ ์ˆ˜ ์žˆ์—ˆ๋‹ค. 1 2 3 4 5 6 let mySet: Set = ["a", "b", "c", "d"] let indices = mySet.indices.map{$0} //Set์ง‘ํ•ฉ์„ indices๋กœ ๋‚˜๋ˆ ์ฃผ๊ณ  map์œผ๋กœ ๋‹ด์•„์ค€๋‹ค. let index = indices[1] //์›ํ•˜๋Š” ์œ„์น˜ ๊ฐ’์„ indices[?]๋กœ ๋„ฃ์€ ๋’ค ?๊ฐ’์„ index๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค. print(indices) print(index) print(mySet[index]) //Set์ง‘ํ•ฉ์— index๋ฅผ ๋„ฃ์œผ๋ฉด Set์˜ ํ•ด๋‹น index๊ฐ’์„ ๋„์ถœํ•ด๋‚ผ ์ˆ˜ ์žˆ๋‹ค. cs ์ถœ๋ ฅํ•ด์„œ ๋ด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด indices๋Š” .. 2020. 5. 13.
Swift indices,compactMap,contentsOf ์ƒˆ๋กญ๊ฒŒ ์•ˆ ๊ฒƒ indices,contentsOf,compactMap ๋จผ์ € indices๋Š” ์•ˆ์ „ํ•˜๊ฒŒ ๋ฐฐ์—ด์„ ๋„๋Š” ๊ฒƒ์ธ๋ฐ ๋งŒ์•ฝ ๋ฐฐ์—ด์ด var a= [1,2,3,4]๋ผ๋ฉด a[6]์„ ๋„ฃ๋Š” ์ˆœ๊ฐ„ ์—๋Ÿฌ๊ฐ€ ๋‚œ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋ ‡๊ฒŒ Array๋ฅผ ํ™•์žฅํ•ด์„œ indices๊ฐ€ index๋ฒ”์œ„๋ผ๋ฉด ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  ์•„๋‹ˆ๋ผ๋ฉด nil์„ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ํ•œ๋‹ค. 1 2 3 4 5 extension Array { subscript (safe index: Int) -> Element? { return indices ~= index ? self[index] : nil } } http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by.. 2020. 4. 4.
[Swift] ๋ฌธ์ž์—ด ๋‚ด๊ฐ€ ์›ํ•˜๋Š”๋งŒํผ ์ž๋ฅด๊ธฐ ๋‚˜๋งŒ์˜ ๋‹จ์–ด์žฅ ์–ดํ”Œ์„ ๋งŒ๋“œ๋Š”๋ฐ ๋‚ด๊ฐ€ ํ‹€๋ฆฐ ๋‹จ์–ด๋ฅผ ๋ชจ์œผ๋Š” ๋ฐฐ์—ด์„ ๋งŒ๋“œ๋Š”๋ฐ ๋‹จ์–ด ํ…์ŠคํŠธ๊ฐ€ ์•„๋ž˜์™€ ๊ฐ™์ด 1. Business ์ด๋ ‡๊ฒŒ 1๊ณผ .์ด ์„ž์—ฌ์žˆ์–ด ์ด๊ฑฐ ๋นผ๊ณ  ๋‹จ์–ด ๊ทธ ์ž์ฒด๋งŒ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์—†์„๊นŒ๋ฅผ ์ƒ๊ฐํ•˜๋‹ค๊ฐ€ (1.)์„ ์ž๋ฅด๋ฉด ๋˜๊ฒ ๋‹ค๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. ์ž๋ฅด๋Š” ๋ฐฉ๋ฒ•์€ ์›ํ•˜๋Š” ๋ฌธ์ž์—ด์—์„œ ์ฒ˜์Œ ์ธ๋ฑ์Šค๋ฅผ ์•Œ์•„๋‚ด๊ณ  ๋ช‡๋ฒˆ์งธ๊นŒ์ง€ ์ž˜๋ผ์ฃผ๋ผ ํ•˜๋ฉด๋œ๋‹ค. ๋ฐฉ๋ฒ•์€ ์•„๋ž˜์™€ ๊ฐ™์ด .index(๋ฌธ์ž์—ด์˜ ์‹œ์ž‘ ์ธ๋ฑ์Šค,์–ด๋””๊นŒ์ง€ ์ž˜๋ผ์•ผํ• ์ง€ ์ธ๋ฑ์Šค)๋ฅผ ์“ฐ๋ฉด๋œ๋‹ค. let str = "1.asd" let startIdx:String.Index = str.index(str.startIndex, offsetBy: 2) print("\(str[startIdx...])") //asd๋ฅผ ์ถœ๋ ฅ ์•„๋ž˜๋Š” ์ ์šฉ๊ฒฐ๊ณผ +๋ณด๋„ˆ์Šค let str = "1.asd" let f.. 2020. 1. 19.
Swift ์ด๋ฉ”์ผ ํ˜•์‹ ๊ฒ€์‚ฌํ•˜๊ธฐ(Email Validation) ์ด๋ฉ”์ผ ํ˜•์‹์„ ๊ฒ€์‚ฌํ•˜๋ ค๋ฉด ์ •๊ทœํ‘œํ˜„์‹(Regular Expression)์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์ง€์‹์ด ์žˆ์–ด์•ผ ํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋ฉ”์ผ validation์ด๋‚˜ ํŒจ์Šค์›Œ๋“œ validation์„ ์น˜๋ฉด ๋‹ค์–‘ํ•œ ์˜ˆ์ œ๊ฐ€ ๋‚˜์˜ค๋‹ˆ๊น ์ผ๋‹จ์€ ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ์กฐ๊ธˆ๋งŒ ์ดํ•ดํ•˜๊ณ  ๋‚˜์ค‘์— ์ •๊ทœํ‘œํ˜„์‹์„ ๊ณต๋ถ€ํ•˜๋„๋ก ํ•˜์ž. ์šฐ์„  ์ด๋ฉ”์ผ ๊ฒ€์‚ฌ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค๊ณ  ํŒŒ๋ผ๋ฏธํ„ฐ์— ๋ฐ›์•„์˜ฌ ๋ฌธ์ž์—ด์„ ๋„ฃ์–ด์ค€๋‹ค. ์šฐ์„  ๊ฐ„๋‹จํ•˜๊ฒŒ let emailRegEx๋ฅผ ์„ค๋ช…ํ•˜๋ฉด [A-Z0-9a-z._%+-]์€ ์˜์–ด ๋Œ€๋ฌธ์ž ์†Œ๋ฌธ์ž ํŠน์ˆ˜๋ฌธ์ž ๋ชจ๋‘ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๋œป์ด๊ณ  +@ ๋Š” ์‚ฌ์ด์— ๋ฌด์กฐ๊ฑด @๊ฐ€ ์žˆ์–ด์•ผ ํ•œ๋‹ค๋Š” ๋œป์ด๋‹ค. @๋’ค์—๋Š” [A-Za-z0-9.-] ๋Œ€๋ฌธ์ž ์†Œ๋ฌธ์ž ์ˆซ์ž .-๋งŒ ๋˜๊ณ  ๊ทธ ๋‹ค์Œ์— .์ด ์˜จ ์ดํ›„ [A-Za-z]๋Š” ์˜์–ด ๋Œ€๋ฌธ์ž ์†Œ๋ฌธ์ž๋งŒ ๊ฐ€๋Šฅ {2,64}๋Š” 2~64๊ธ€์ž๋งŒ ํ—ˆ์šฉํ•œ๋‹ค๋Š” ๋œป์ด.. 2020. 1. 11.
728x90
๋ฐ˜์‘ํ˜•