๐ŸŽ iOS & Swift

ยท๐ŸŽ iOS & Swift
๋“ค์–ด๊ฐ€๋ฉฐ UIImage๋Š” Decodable๊ณผ Encodable์„ ๋”ฐ๋ฅด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ•œ ๋งˆ๋””๋กœ UIImage๋Š” Codable ํ”„๋กœํ† ์ฝœ์„ ๋”ฐ๋ฅด์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ๋ชจ๋ธ ๊ตฌ์กฐ๋ฅผ ์งค ๋•Œ ์ฃผ์˜ํ•ด์•ผ ํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. struct SampleDataModel: Codable { let image: UIImage // โ›”๏ธ ์—๋Ÿฌ ๋ฐœ์ƒํ•˜๋Š” ๋ถ€๋ถ„ let title: String let contents: String let tag: [Int] let createdAt: String } ํ•ด๊ฒฐ ์ง€๊ธˆ์€ image ๋‹จ์ผ ๊ฐ์ฒด์— ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์•„๋ž˜ 2๊ฐ€์ง€ ๋ฐฉ๋ฒ• ์ค‘ ์ ์ ˆํ•˜๊ฒŒ ํ•˜๋‚˜๋ฅผ ํƒํ•ด์„œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์˜ˆ์‹œ 1 struct SampleDataModel: Codable { ..
ยท๐ŸŽ iOS & Swift
first(where:) Array์˜ ์ธ์Šคํ„ด์Šค ๋ฉ”์„œ๋“œ์ด๋‹ค. ์ƒ๊ฐ๋ณด๋‹ค ์ •๋ง ๋งŽ์€ ๊ณณ์—์„œ ์ฝ”๋“œ๊ฐ€ ์‚ฌ์šฉ๋˜์–ด์„œ ์ด๋ฒˆ์— ์ •๋ฆฌํ•ด์•ผ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค. ์ •์˜ func first(where predicate: (Element) throws -> Bool rethrows -> Element? Parameter predicate ์‹œํ€€์Šค์˜ ์š”์†Œ๋ฅผ ์ธ์ˆ˜๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์š”์†Œ๊ฐ€ ์ผ์น˜ํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ถ€์šธ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ํด๋กœ์ €. Return Predicate๋ฅผ ๋งŒ์กฑํ•˜๋Š” ์ฒซ ๋ฒˆ์งธ ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ฑฐ๋‚˜, ์—†๋‹ค๋ฉด nil์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. Example 1 (Apple ๊ณต์‹ ๋ฌธ์„œ) let numbers = [3, 7, 4, -2, 9, -6, 10, 1] if let firstNegative = numbers.first(where: { $0 ..
ยท๐ŸŽ iOS & Swift
๋“ค์–ด๊ฐ€๊ธฐ์ „์— Rx, Reactive Programming์ด ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ž˜ํ•˜๊ธฐ ์œ„ํ•œ ๋…ธ๋ ฅ์ด๋ผ๊ณ  ์ด์ „ ์‹œ๊ฐ„(Reactive Programming ํŽธ)์— ์ด์•ผ๊ธฐํ–ˆ๋Š”๋ฐ ๊ทธ๋Ÿผ ๋น„๋™๊ธฐ? ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๋ฌด์—‡์ผ๊ฐ€์š”? ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ดํŽด๋ณด๋„๋ก ํ•˜์ฃ . ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ? iOS ์•ฑ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฒ„ํŠผ ํƒญ(ํด๋ฆญ)์— ๋ฐ˜์‘ํ•˜๊ธฐ ํ‚ค๋ณด๋“œ๋ฅผ ํ…์ŠคํŠธ ํ•„๋“œ๋กœ ์• ๋‹ˆ๋ฉ”์ด์…˜ํ•˜๋ฉด ํฌ์ปค์Šค๊ฐ€ ์‚ฌ๋ผ์ง ์ธํ„ฐ๋„ท์—์„œ ํฐ ์‚ฌ์ง„ ๋‹ค์šด๋กœ๋“œ → ๋‹ค์šด๋กœ๋“œ ์ค‘์— ๋‹ค๋ฅธ ์ž‘์—…์„ ์ˆ˜ํ–‰ ๋ฐ์ดํ„ฐ ๋น„ํŠธ๋ฅผ ๋””์Šคํฌ์— ์ €์žฅ ์˜ค๋””์˜ค ์žฌ์ƒ ์ถœ์ฒ˜ : Raywenderich - ์—ฌ๊ธฐ ํด๋ฆญ ํ•œ ๋ฒˆ ์ƒ๊ฐ์„ ํ•ด๋ณด๋ฉด ๊ฐ๊ฐ์˜ ์ž‘์—…๋“ค์€ ์„œ๋กœ์˜ ์‹คํ–‰์„ ์ฐจ๋‹จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์„œ๋กœ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์—์„œ ์„œ๋กœ ๋‹ค๋ฅธ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก iOS๋Š” ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜์˜ API๋ฅผ ์ œ..
ยท๐ŸŽ iOS & Swift
๊น€์„ฑ์ผ๋‹˜์˜ ๋ฆฌ์•กํ‹ฐ๋ธŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ž€? ๊ธ€์„ ๋ฉ”์ธ์œผ๋กœ ์ฐธ๊ณ ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. - ์ด ๊ธ€์€ ๊ฐœ์ธ์ ์ธ ํ•™์Šต๊ณผ ๊ณต์œ ๋ฅผ ๋ชฉ์ ์œผ๋กœ ์ž‘์„ฑ๋œ ๊ธ€์ž…๋‹ˆ๋‹ค. ์ฐธ๊ณ ํ•œ ๋ ˆํผ๋Ÿฐ์Šค๋Š” ๊ธ€์˜ ํ•˜๋‹จ์— ๊ธฐ์žฌํ•ด๋†“์•˜์œผ๋ฉฐ ์›๋ฌธ์„ ๊ทธ๋Œ€๋กœ ๊ฐ€์ ธ๋‹ค ์“ด ๋‚ด์šฉ๋„ ์žˆ์œผ๋‹ˆ ์ฐธ๊ณ ํ•ด์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๋“ค์–ด๊ฐ€๊ธฐ์ „์— RxSwift๋ฅผ ๊ณต๋ถ€ํ•˜๋ ค๊ณ  ํ•˜์‹œ๋‚˜์š”? ๊ทธ๋Ÿผ ๋ฐ˜์‘ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ž€ ๋ฌด์—‡์ธ์ง€, Rx๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์•Œ์•„๋ณด๊ณ  ์‹œ์ž‘ํ•˜๋„๋ก ํ•˜์ฃ . ๊ธ€์„ ์ฝ๊ณ ๋‚˜๋ฉด ์™œ RxSwift๊ฐ€ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ API์ธ์ง€ ์ดํ•ด๊ฐ€ ์กฐ๊ธˆ์€ ๊ฐ€์‹ค๊ฑฐ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” Rx, Reactive Programming ๋‹ค์Œ ํ‚ค์›Œ๋“œ์˜ ์˜๋ฏธ๊ฐ€ ๋ฌด์—‡์ธ์ง€๋งŒ ์•Œ๊ฒŒ ๋œ๋‹ค๋ฉด ์„ฑ๊ณต์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ๊ฐ€๋ณด๋„๋ก ํ•˜์ฃ . Reactive Programming(๋ฐ˜์‘ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ)์œผ๋กœ์˜ ์—ฌํ–‰ Reactive programmin..
ยท๐ŸŽ iOS & Swift
UIButton.Configuration iOS 15.0๋ถ€ํ„ฐ ์ด์šฉ ๊ฐ€๋Šฅ Struct ํƒ€์ž… ๊ธฐ๋ณธ ์ œ๊ณต Configuration ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณต๋˜๋Š” ๋ฒ„ํŠผ ์Šคํƒ€์ผ์ด ํƒ€์ž… ๋ฉ”์„œ๋“œ ํ˜•ํƒœ๋กœ ๋งŒ๋“ค์–ด์ ธ์žˆ๋‹ค. Configuration ํ™•์žฅ ๋งค๋ฒˆ configuration์„ ๋ฒ„ํŠผ๋งˆ๋‹ค ๋งŒ๋“ค์–ด ์ฃผ๋Š”๊ฒŒ ์ฝ”๋“œ ๋ผ์ธ๋„ ๊ธธ์–ด์ง€๊ณ  ๊ท€์ฐฎ์•˜๋Š”๋ฐ ๋ฉ˜ํ† ๋‹˜๊ป˜์„œ ๋ง์”€ํ•ด์ฃผ์‹  extension์œผ๋กœ ํ™•์žฅํ•œ๋‹ค๋Š” ๊ด€์ ์ด ์ข‹์•˜๋‹ค. ํ”„๋กœ์ ํŠธ ๋‚ด์— ๋ฒ„ํŠผ ์Šคํƒ€์ผ์ด ๋ช‡ ๊ฐ€์ง€ ์—†๊ฑฐ๋‚˜ ์ผ์ •ํ•˜๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋งŒ๋“ค์–ด์“ฐ๋Š” ๊ฒƒ์ด ์ข‹์•„๋ณด์ธ๋‹ค. (๊ธฐ๋ณธ ์ œ๊ณต ์Šคํƒ€์ผ๊ณผ ๋™์ผํ•œ ์•„์ด๋””์–ด ์ธ ๊ฒƒ ๊ฐ™๋‹ค.) ์ง„ํ–‰ ์ค‘์ธ ํ”„๋กœ์ ํŠธ ์˜ˆ์‹œ ์•„์ง ์‹ค์ œ๋กœ ์ ์šฉํ•˜์ง€๋Š” ์•Š์•˜์ง€๋งŒ, ํ”„๋กœ์ ํŠธ ๋‚ด์— 3๊ฐ€์ง€ ์Šคํƒ€์ผ์˜ ๋ฒ„ํŠผ์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž. ๊ทธ๋Ÿฐ ๊ฒฝ์šฐ์— ์—ด๊ฑฐํ˜•(Enum)๊ณผ Configuration ํ™•์žฅ์„ ..
ยท๐ŸŽ iOS & Swift
๋ณธ ๊ธ€์€ WWDC ๋ฅผ ๋ณด๊ณ , ๋ฒˆ์—ญ ๋ฐ ์š”์•ฝ ๊ทธ๋ฆฌ๊ณ  ์‹คํ–‰ํ•ด๋ณด๋Š” ์Šคํ„ฐ๋”” ํ”„๋กœ์ ํŠธ์˜ ์ผํ™˜์ž…๋‹ˆ๋‹ค. Introducing Combine WWDC19์—๋Š” Apple์˜ ์ตœ์‹  Framework์ธ Combine์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค. ๋น„๋™๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ๋Œ€ํ•ด์„œ ์ด์•ผ๊ธฐํ•˜์ž๊ณ  ํ•˜๋ฉด์„œ ์„œ๋ง‰์„ ์—ฌ๋Š”๋ฐ์š”. ๊ฐ™์ด ์˜ˆ์‹œ๋ฅผ ๋ณด๊ณ  ์ดํ•ดํ•˜๋ฉด์„œ Combine์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๋„๋ก ํ•ฉ์‹œ๋‹ค. ๊ฐ„๋‹จํ•œ ํšŒ์›๊ฐ€์ž… ํ™”๋ฉด์„ ์˜ˆ์‹œ๋กœ ๋“ญ๋‹ˆ๋‹ค. ์ด ํ™”๋ฉด์—์„œ์˜ ์š”๊ตฌ์‚ฌํ•ญ์€ ํฌ๊ฒŒ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์šฐ์„  ์‚ฌ์šฉ์ž ์ด๋ฆ„์ด ์œ ํšจํ•œ์ง€ ๋„คํŠธ์›Œํฌ์— ์š”์ฒญ์„ ํ•ด์„œ ํ™•์ธ์„ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ์„œ๋กœ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธ์„ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ชจ๋“  ์ž‘์—…์€ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์—์„œ ์ฐจ๋‹จ๋˜์ง€ ์•Š๊ณ  ๋ฐ˜์‘ํ˜• ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋จผ์ € ์‚ฌ์šฉ์ž ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋„ ์ด๋ฏธ ๋งŽ์€ ๋น„๋™๊ธฐ ์ž‘์—…์ด ์ง„..
ยท๐ŸŽ iOS & Swift
๋“ค์–ด๊ฐ€๋ฉฐ ์•ˆ๋…•ํ•˜์„ธ์š”, ํƒœ๋ผ์ž…๋‹ˆ๋‹ค :) ์ •๋ง ์˜ค๋žœ๋งŒ์— ๊ธ€์„ ์”๋‹ˆ๋‹ค..๐Ÿ˜‚ ์š”์ƒˆ ๋ฒˆ์•„์›ƒ์ด ์˜ฌ ๊ฒƒ๋งŒ ๊ฐ™์•„์„œ ์•„์Šฌ์•„์Šฌ ํ•˜๋ฃจ๋ฅผ ๋ณด๋‚ด๊ณ  ์žˆ์ง€๋งŒ ๋‹ค์‹œ๊ธˆ ๋งˆ์Œ์„ ๋‹ค์žก๊ณ  ์—ด์‹ฌํžˆ ํ•ด๋ณด๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. ๊ธ€ ์“ฐ๋Š” ๊ฒƒ์„ ์ƒ๊ฐ๋ณด๋‹ค ๋„ˆ๋ฌด ๋ฏธ๋ค„๋‘๊ณ  ์žˆ์—ˆ๋Š”๋ฐ, ์™„๋ฒฝ์„ ์ถ”๊ตฌํ•˜๊ธฐ ๋ณด๋‹ค๋Š” ์ผ๋‹จ ์‹ค์ฒœ์„ ํ•˜๋Š” ๊ฒƒ์— ์Šต๊ด€์„ ๋“ค์ด๋„๋ก ๋…ธ๋ ฅํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์˜ค๋Š˜ ๊ฐ„๋‹จํ•˜๊ฒŒ ์†Œ๊ฐœํ•  ๋‚ด์šฉ์€์š”. ์ œ๊ฐ€ ๋‚ ์งœ ํ˜•์‹์— ๊ด€๋ จํ•ด์„œ ์‚ฌ์šฉํ–ˆ๋˜ ์ฝ”๋“œ ์กฐ๊ฐ์ด๋ผ๊ณ  ํ•˜๋ฉด ๋ ๊นŒ์š”. ๋“ฃ๊ณ  ์žˆ๋Š” ์ˆ˜์—…์—์„œ๋„ ๋‚ ์งœ๋ฅผ ๋‹ค๋ค„๋ณผ ์ผ์ด ์žˆ์—ˆ๊ณ , ์ง„ํ–‰ ์ค‘์ธ ํ”„๋กœ์ ํŠธ ๋‚ด์—์„œ๋„ ์ œ๊ฐ€ ์บ˜๋ฆฐ๋”๋ฅผ ๋งก๊ณ  ์žˆ์–ด์„œ ๋‚ ์งœ๋ฅผ ๋‹ค๋ฃฐ ์ผ์ด ๋งŽ์€๋ฐ์š”. ์ƒ๊ฐ๋ณด๋‹ค ๋‚ ์งœ ํ˜•์‹์„ ๊ด€๋ฆฌํ•˜๊ธฐ ๋„ˆ๋ฌด ๊ท€์ฐฎ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์—ด๊ฑฐํ˜•์„ ์ด์šฉํ•ด์„œ ์ข€ ๋” ๊น”๋”ํ•˜๊ฒŒ DateFormat์„ ๊ด€๋ฆฌํ•ด๋ณด๋„๋ก ํ•ด์š”. ์šฐ๋ฆฌ๊ฐ€ ๊ทธ๋™์•ˆ ๋‚ ์งœ๋ฅผ ๋‹ค๋ฃจ๋ฉด์„œ ํ–ˆ๋˜ ํ–‰๋™์„ ..
ยท๐ŸŽ iOS & Swift
๊ทธ ๋™์•ˆ ๋ง‰์—ฐํ•˜๊ฒŒ๋„ ํƒ€์ž… ์–ด๋…ธํ…Œ์ด์…˜(๋ช…์‹œ)๊ฐ€ ์ปดํŒŒ์ผ ์†๋„๊ฐ€ ๋” ๋น ๋ฅด๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋˜์ง€๋ผ ์•„๋ฌด ์ƒ๊ฐ ์—†์ด ํƒ€์ž… ๋ช…์‹œ๋ฅผ ํ•˜๋Š” ์Šต๊ด€์„ ๋“ค์ด๊ณ  ์žˆ์—ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ตœ๊ทผ ๋“ฃ๊ณ  ์žˆ๋Š” ๊ต์œก ๊ณผ์ •์—์„œ ๋ฉ˜ํ† ๋‹˜๊ป˜์„œ ํƒ€์ž… ์ถ”๋ก ์„ ํ•˜๋Š” ๊ฒƒ์ด ๋” ๋‚˜์•„๋ณด์ธ๋‹ค๋ผ๋Š” ๋ง์”€์„ ํ•ด์ฃผ์…จ๊ณ , ์™œ์ธ์ง€ ๊ถ๊ธˆํ–ˆ๋˜์ง€๋ผ ์—ฌ์ญค๋ณด๊ฒŒ ๋˜์—ˆ๋‹ค. ๋‹ต๋ณ€ ์ฃผ์‹  ๊ฒƒ์œผ๋กœ๋Š” ์ปดํŒŒ์ผ๋Ÿฌ์˜ ์„ฑ๋Šฅ์ด ์ ์  ๋” ๊ฐœ์„ ๋˜๊ณ  ์žˆ๊ณ , ํƒ€์ž… ์ถ”๋ก ์ด ์ปดํŒŒ์ผ ์†๋„๊ฐ€ ๋” ๋น ๋ฅด๋‹ค๋Š” ์‹คํ—˜ ๊ฒฐ๊ณผ๋„ ์žˆ๋‹ค๊ณ  ๋‹ต๋ณ€์ฃผ์…จ๋‹ค. ์‹ค์ œ๋กœ ์•„๋ž˜์— ์ฒจ๋ถ€ํ•œ ๋งํฌ๋ฅผ ๋ณด๋ฉด ๊ฐ„๋‹จํ•œ ์‹คํ—˜ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•ด๋ณผ ์ˆ˜ ์žˆ๋‹ค. https://forums.swift.org/t/regarding-swift-type-inference-compile-time-performance/49748/2 let a = "hello, world!" // type..
taeeekki
'๐ŸŽ iOS & Swift' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๊ธ€ ๋ชฉ๋ก (4 Page)