๋ค์ด๊ฐ๋ฉฐ 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 ..
๋ค์ด๊ฐ๊ธฐ์ ์ Rx, Reactive Programming์ด ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ์ํ๊ธฐ ์ํ ๋
ธ๋ ฅ์ด๋ผ๊ณ ์ด์ ์๊ฐ(Reactive Programming ํธ)์ ์ด์ผ๊ธฐํ๋๋ฐ ๊ทธ๋ผ ๋น๋๊ธฐ? ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ด ๋ฌด์์ผ๊ฐ์? ๊ฐ๋จํ๊ฒ ์ดํด๋ณด๋๋ก ํ์ฃ . ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ? iOS ์ฑ์ ๋ค์๊ณผ ๊ฐ์ ์์
์ ์ํํ ์ ์์ต๋๋ค. ๋ฒํผ ํญ(ํด๋ฆญ)์ ๋ฐ์ํ๊ธฐ ํค๋ณด๋๋ฅผ ํ
์คํธ ํ๋๋ก ์ ๋๋ฉ์ด์
ํ๋ฉด ํฌ์ปค์ค๊ฐ ์ฌ๋ผ์ง ์ธํฐ๋ท์์ ํฐ ์ฌ์ง ๋ค์ด๋ก๋ → ๋ค์ด๋ก๋ ์ค์ ๋ค๋ฅธ ์์
์ ์ํ ๋ฐ์ดํฐ ๋นํธ๋ฅผ ๋์คํฌ์ ์ ์ฅ ์ค๋์ค ์ฌ์ ์ถ์ฒ : Raywenderich - ์ฌ๊ธฐ ํด๋ฆญ ํ ๋ฒ ์๊ฐ์ ํด๋ณด๋ฉด ๊ฐ๊ฐ์ ์์
๋ค์ ์๋ก์ ์คํ์ ์ฐจ๋จํ์ง ์์ต๋๋ค. ์๋ก ๋ค๋ฅธ ์ค๋ ๋์์ ์๋ก ๋ค๋ฅธ ์์
์ ์ํํ ์ ์๋๋ก iOS๋ ๋ค์ํ ์ข
๋ฅ์ API๋ฅผ ์ ..
๊น์ฑ์ผ๋์ ๋ฆฌ์กํฐ๋ธ ํ๋ก๊ทธ๋๋ฐ์ด๋? ๊ธ์ ๋ฉ์ธ์ผ๋ก ์ฐธ๊ณ ํ๊ณ ์์ต๋๋ค. - ์ด ๊ธ์ ๊ฐ์ธ์ ์ธ ํ์ต๊ณผ ๊ณต์ ๋ฅผ ๋ชฉ์ ์ผ๋ก ์์ฑ๋ ๊ธ์
๋๋ค. ์ฐธ๊ณ ํ ๋ ํผ๋ฐ์ค๋ ๊ธ์ ํ๋จ์ ๊ธฐ์ฌํด๋์์ผ๋ฉฐ ์๋ฌธ์ ๊ทธ๋๋ก ๊ฐ์ ธ๋ค ์ด ๋ด์ฉ๋ ์์ผ๋ ์ฐธ๊ณ ํด์ฃผ์๊ธฐ ๋ฐ๋๋๋ค. ๋ค์ด๊ฐ๊ธฐ์ ์ RxSwift๋ฅผ ๊ณต๋ถํ๋ ค๊ณ ํ์๋์? ๊ทธ๋ผ ๋ฐ์ํ ํ๋ก๊ทธ๋๋ฐ์ด๋ ๋ฌด์์ธ์ง, Rx๊ฐ ๋ฌด์์ธ์ง ์์๋ณด๊ณ ์์ํ๋๋ก ํ์ฃ . ๊ธ์ ์ฝ๊ณ ๋๋ฉด ์ RxSwift๊ฐ ๋น๋๊ธฐ ์ฒ๋ฆฌ๋ฅผ ์ํ API์ธ์ง ์ดํด๊ฐ ์กฐ๊ธ์ ๊ฐ์ค๊ฑฐ๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ด๋ฒ ๊ธ์์๋ Rx, Reactive Programming ๋ค์ ํค์๋์ ์๋ฏธ๊ฐ ๋ฌด์์ธ์ง๋ง ์๊ฒ ๋๋ค๋ฉด ์ฑ๊ณต์
๋๋ค. ๊ทธ๋ผ ๊ฐ๋ณด๋๋ก ํ์ฃ . Reactive Programming(๋ฐ์ํ ํ๋ก๊ทธ๋๋ฐ)์ผ๋ก์ ์ฌํ Reactive programmin..
UIButton.Configuration iOS 15.0๋ถํฐ ์ด์ฉ ๊ฐ๋ฅ Struct ํ์
๊ธฐ๋ณธ ์ ๊ณต Configuration ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณต๋๋ ๋ฒํผ ์คํ์ผ์ด ํ์
๋ฉ์๋ ํํ๋ก ๋ง๋ค์ด์ ธ์๋ค. Configuration ํ์ฅ ๋งค๋ฒ configuration์ ๋ฒํผ๋ง๋ค ๋ง๋ค์ด ์ฃผ๋๊ฒ ์ฝ๋ ๋ผ์ธ๋ ๊ธธ์ด์ง๊ณ ๊ท์ฐฎ์๋๋ฐ ๋ฉํ ๋๊ป์ ๋ง์ํด์ฃผ์ extension์ผ๋ก ํ์ฅํ๋ค๋ ๊ด์ ์ด ์ข์๋ค. ํ๋ก์ ํธ ๋ด์ ๋ฒํผ ์คํ์ผ์ด ๋ช ๊ฐ์ง ์๊ฑฐ๋ ์ผ์ ํ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๋ง๋ค์ด์ฐ๋ ๊ฒ์ด ์ข์๋ณด์ธ๋ค. (๊ธฐ๋ณธ ์ ๊ณต ์คํ์ผ๊ณผ ๋์ผํ ์์ด๋์ด ์ธ ๊ฒ ๊ฐ๋ค.) ์งํ ์ค์ธ ํ๋ก์ ํธ ์์ ์์ง ์ค์ ๋ก ์ ์ฉํ์ง๋ ์์์ง๋ง, ํ๋ก์ ํธ ๋ด์ 3๊ฐ์ง ์คํ์ผ์ ๋ฒํผ์ด ์๋ค๊ณ ๊ฐ์ ํด๋ณด์. ๊ทธ๋ฐ ๊ฒฝ์ฐ์ ์ด๊ฑฐํ(Enum)๊ณผ Configuration ํ์ฅ์ ..
๋ณธ ๊ธ์ WWDC ๋ฅผ ๋ณด๊ณ , ๋ฒ์ญ ๋ฐ ์์ฝ ๊ทธ๋ฆฌ๊ณ ์คํํด๋ณด๋ ์คํฐ๋ ํ๋ก์ ํธ์ ์ผํ์
๋๋ค. Introducing Combine WWDC19์๋ Apple์ ์ต์ Framework์ธ Combine์ ์๊ฐํฉ๋๋ค. ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ๋ํด์ ์ด์ผ๊ธฐํ์๊ณ ํ๋ฉด์ ์๋ง์ ์ฌ๋๋ฐ์. ๊ฐ์ด ์์๋ฅผ ๋ณด๊ณ ์ดํดํ๋ฉด์ Combine์ ๋ํด์ ์์๋ณด๋๋ก ํฉ์๋ค. ๊ฐ๋จํ ํ์๊ฐ์
ํ๋ฉด์ ์์๋ก ๋ญ๋๋ค. ์ด ํ๋ฉด์์์ ์๊ตฌ์ฌํญ์ ํฌ๊ฒ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ์ฐ์ ์ฌ์ฉ์ ์ด๋ฆ์ด ์ ํจํ์ง ๋คํธ์ํฌ์ ์์ฒญ์ ํด์ ํ์ธ์ ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋น๋ฐ๋ฒํธ๊ฐ ์๋ก ์ผ์นํ๋์ง ํ์ธ์ ํฉ๋๋ค. ์ด ๋ชจ๋ ์์
์ ๋ฉ์ธ ์ค๋ ๋์์ ์ฐจ๋จ๋์ง ์๊ณ ๋ฐ์ํ ์ธํฐํ์ด์ค๋ฅผ ์ ์งํด์ผ ํฉ๋๋ค. ๋จผ์ ์ฌ์ฉ์ ์ด๋ฆ์ ์
๋ ฅํ๊ธฐ ์์ํฉ๋๋ค. ์ฌ๊ธฐ์๋ ์ด๋ฏธ ๋ง์ ๋น๋๊ธฐ ์์
์ด ์ง..
๋ค์ด๊ฐ๋ฉฐ ์๋
ํ์ธ์, ํ๋ผ์
๋๋ค :) ์ ๋ง ์ค๋๋ง์ ๊ธ์ ์๋๋ค..๐ ์์ ๋ฒ์์์ด ์ฌ ๊ฒ๋ง ๊ฐ์์ ์์ฌ์์ฌ ํ๋ฃจ๋ฅผ ๋ณด๋ด๊ณ ์์ง๋ง ๋ค์๊ธ ๋ง์์ ๋ค์ก๊ณ ์ด์ฌํ ํด๋ณด๊ณ ์ ํฉ๋๋ค. ๊ธ ์ฐ๋ ๊ฒ์ ์๊ฐ๋ณด๋ค ๋๋ฌด ๋ฏธ๋ค๋๊ณ ์์๋๋ฐ, ์๋ฒฝ์ ์ถ๊ตฌํ๊ธฐ ๋ณด๋ค๋ ์ผ๋จ ์ค์ฒ์ ํ๋ ๊ฒ์ ์ต๊ด์ ๋ค์ด๋๋ก ๋
ธ๋ ฅํด๋ณด๊ฒ ์ต๋๋ค. ์ค๋ ๊ฐ๋จํ๊ฒ ์๊ฐํ ๋ด์ฉ์์. ์ ๊ฐ ๋ ์ง ํ์์ ๊ด๋ จํด์ ์ฌ์ฉํ๋ ์ฝ๋ ์กฐ๊ฐ์ด๋ผ๊ณ ํ๋ฉด ๋ ๊น์. ๋ฃ๊ณ ์๋ ์์
์์๋ ๋ ์ง๋ฅผ ๋ค๋ค๋ณผ ์ผ์ด ์์๊ณ , ์งํ ์ค์ธ ํ๋ก์ ํธ ๋ด์์๋ ์ ๊ฐ ์บ๋ฆฐ๋๋ฅผ ๋งก๊ณ ์์ด์ ๋ ์ง๋ฅผ ๋ค๋ฃฐ ์ผ์ด ๋ง์๋ฐ์. ์๊ฐ๋ณด๋ค ๋ ์ง ํ์์ ๊ด๋ฆฌํ๊ธฐ ๋๋ฌด ๊ท์ฐฎ์ต๋๋ค. ๊ทธ๋์ ์ด๊ฑฐํ์ ์ด์ฉํด์ ์ข ๋ ๊น๋ํ๊ฒ DateFormat์ ๊ด๋ฆฌํด๋ณด๋๋ก ํด์. ์ฐ๋ฆฌ๊ฐ ๊ทธ๋์ ๋ ์ง๋ฅผ ๋ค๋ฃจ๋ฉด์ ํ๋ ํ๋์ ..
๊ทธ ๋์ ๋ง์ฐํ๊ฒ๋ ํ์
์ด๋
ธํ
์ด์
(๋ช
์)๊ฐ ์ปดํ์ผ ์๋๊ฐ ๋ ๋น ๋ฅด๋ค๊ณ ์๊ฐํ๋์ง๋ผ ์๋ฌด ์๊ฐ ์์ด ํ์
๋ช
์๋ฅผ ํ๋ ์ต๊ด์ ๋ค์ด๊ณ ์์๋ค. ๊ทธ๋ฌ๋ ์ต๊ทผ ๋ฃ๊ณ ์๋ ๊ต์ก ๊ณผ์ ์์ ๋ฉํ ๋๊ป์ ํ์
์ถ๋ก ์ ํ๋ ๊ฒ์ด ๋ ๋์๋ณด์ธ๋ค๋ผ๋ ๋ง์์ ํด์ฃผ์
จ๊ณ , ์์ธ์ง ๊ถ๊ธํ๋์ง๋ผ ์ฌ์ญค๋ณด๊ฒ ๋์๋ค. ๋ต๋ณ ์ฃผ์ ๊ฒ์ผ๋ก๋ ์ปดํ์ผ๋ฌ์ ์ฑ๋ฅ์ด ์ ์ ๋ ๊ฐ์ ๋๊ณ ์๊ณ , ํ์
์ถ๋ก ์ด ์ปดํ์ผ ์๋๊ฐ ๋ ๋น ๋ฅด๋ค๋ ์คํ ๊ฒฐ๊ณผ๋ ์๋ค๊ณ ๋ต๋ณ์ฃผ์
จ๋ค. ์ค์ ๋ก ์๋์ ์ฒจ๋ถํ ๋งํฌ๋ฅผ ๋ณด๋ฉด ๊ฐ๋จํ ์คํ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํด๋ณผ ์ ์๋ค. https://forums.swift.org/t/regarding-swift-type-inference-compile-time-performance/49748/2 let a = "hello, world!" // type..