๋ถ๋ฅ ์ ์ฒด๋ณด๊ธฐ384 [SwiftUI] Property Wrappers Property Wrappers property wrapper๋ ํ๋กํผํฐ์ custom ํ ๋์์ ์ถ๊ฐํ ์ ์๋ ๊ธฐ๋ฅ์ ๋๋ค. ํ๋กํผํฐ์ ๋ํ ์ ๊ทผ์ ๋ํ ํ์ฌ ์ถ๊ฐ ๋ก์ง์ด๋ ๋์์ ์บก์ํ ํฉ๋๋ค. ์ด๋ฅผ ํตํด ์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ, ๊ฐ๋ ์ฑ ๋ฐ ์ ์ง ๋ณด์์ฑ์ ํฅ์์ํฌ ์ ์์ต๋๋ค. @State view์ ์ํ๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. view ๋ด๋ถ ๋ฐ์ดํฐ๊ฐ ๋ณ๊ฒฝ๋๋ฉด ์๋์ผ๋ก view๋ฅผ ์ ๋ฐ์ดํธํฉ๋๋ค. ๊ฐ๋ณ ๊ฐ์ผ๋ก ์ทจ๊ธ๋๋ฉฐ, ๋ทฐ๊ฐ ์์ฑ๋ ๋ ํด๋น ๊ฐ์ด ์ด๊ธฐํ๋๊ณ , ์ฌ์ฉ์ ์ํธ ์์ฉ ๋๋ ์ธ๋ถ ์ด๋ฒคํธ์ ๋ฐ๋ผ ๊ฐ์ด ๋ณ๊ฒฝ๋ ์ ์์ต๋๋ค. ๋ทฐ ๋ด๋ถ์์ ์ฌ์ฉ๋๊ธฐ ๋๋ฌธ์ private์ผ๋ก ์ ์ธํ๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค. import SwiftUI struct ContentView: View { @State private va.. 2024. 4. 4. [Swift] ์๋ ์ฐธ์กฐ ์นด์ดํธ ์๋ ์ฐธ์กฐ ์นด์ดํธ(ARC, Automatic Reference Counting)์ฑ์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ์ํด ์ฌ์ฉ์๋์ผ๋ก ์ฐธ์กฐ ํ์๋ฅผ ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ์ ๊ฒฝ์ธ ํ์๊ฐ ์๊ณ ARC๊ฐ ์๋์ผ๋ก ์ฌ์ฉํ์ง ์๋ ์ธ์คํด์ค๋ฅผ ๋ฉ๋ชจ๋ฆฌ์์ ํด์งํน์ ๊ฒฝ์ฐ์ ARC์์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ์ํด ์ฝ๋์ ํน์ ๊ด๊ณ์ ๋ํ ์ ๋ณด๋ฅผ ํ์๋ก ํจ์ฐธ์กฐ ํ์๋ ํด๋์ค ํ์ ์ ์ธ์คํด์ค์๋ง ์ ์ฉ๋๊ณ ๊ตฌ์กฐ์ฒด, ์ด๊ฑฐํ ๋ฑ ๊ฐ ํ์ ์๋ ์ ์ฉ๋์ง ์์ ARC ๋์์๋ก์ด ํด๋์ค ์ธ์คํด์ค๋ฅผ ๋ง๋ค ๋ ๋ง๋ค ARC๋ ์ธ์คํด์ค ์ ๋ณด๋ฅผ ๋ด๋๋ฐ ํ์ํ ํฌ๊ธฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น๋ฉ๋ชจ๋ฆฌ๋ ์ธ์คํด์ค์ ๋ํ ์ ๋ณด์ ๊ด๋ จ๋ ์ ์ฅ ํ๋กํผํฐ ๊ฐ์ ๊ฐ๊ณ ์์์ธ์คํด์ค๊ฐ ๋์ด์ ์ฌ์ฉ๋์ง ์์ ๋ ARC๋ ๊ทธ ์ธ์คํด์ค๊ฐ ์ฐจ์งํ๊ณ ์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์งํด ๊ณต๊ฐ์ ํ๋ณดAR.. 2024. 4. 2. [Swift] ์ ๋ค๋ฆญ ์ ๋ค๋ฆญ(Generics)์ ์ฐํ๊ณ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ํจ์์ ํ์ ์ ์ฝ๋๋ฅผ ์์ฑํ๋ ๊ฒ์ ๊ฐ๋ฅํ๊ฒ ํจ์ธ์๊ฐ์ ํ์ ๋ง ๋ค๋ฅด๊ณ ๋์ผํ ๊ธฐ๋ฅ์ ์ํํ๋ ํจ์๋ฅผ ํ๋๋ก ๋ง๋ค ์ ์์ ์ ๋ค๋ฆญ ํจ์(Generic Functions)ํจ์๋ช ๋ค์ ํ์ ์ด๋ฆ placeholder์ธ T๋ฅผ ์ ์ธํ๊ณ a,b ํ๋ผ๋ฏธํฐ๋ฅผ T๋ก ์ ์ธfunc swapTwoValues(_ a: inout T, _ b: inout T) { let temporaryA = a a = b b = temporaryA}var someInt = 3var anotherInt = 107swapTwoValues(&someInt, &anotherInt)// someInt is now 107, and anotherInt is now 3var someString .. 2024. 4. 2. [Swift] ํ๋กํ ์ฝ ํ๋กํ ์ฝ(Protocols)์ด๋ค ๊ธฐ๋ฅ์ ํ์ํ ์๊ตฌ์ฌํญ์ ์ ์ธํด๋๋ ๊ฒํด๋์ค, ๊ตฌ์กฐ์ฒด, ์ด๊ฑฐํ์ ์ํด ์ฑํํ๋กํ ์ฝ ๋ฌธ๋ฒprotocol SomeProtocol {// protocol definition}ํ๋กํ ์ฝ์ ๋ฐ๋ฅด๋ ํ์ ์ ์ ์ํ๊ธฐ ์ํด์๋ ํ์ ์ด๋ฆ ๋ค์ ์ฝ๋ก (:)์ ๋ถ์ด๊ณ ํ๋กํ ์ฝ ์ด๋ฆ์ ์ ์ํ๋กํ ์ฝ์ ์ฑํํ ๋๋ ํ๋กํ ์ฝ์ ์ ์๋ ์๊ตฌ์ฌํญ์ ๋ฐ๋์ ๊ตฌํ ํด์ผ๋ง ํจ struct SomeStructure: FirstProtocol, AnotherProtocol { // structure definition goes here}class SomeClass: SomeSuperclass, FirstProtocol, AnotherProtocol { // class definition goes her.. 2024. 3. 29. [Swift] ์๋ฌ ์ฒ๋ฆฌ ์๋ฌ์ ํ์์ ๋ฐ์enum VendingMachineError: Error { case invalidSelection case insufficientFunds(coinsNeeded: Int) case outOfStock}throw VendingMachineError.insufficientFunds(coinsNeeded: 5) ์๋ฌ ์ฒ๋ฆฌ์๋ฌ๊ฐ ๋ฐ์ํ ํจ์์์ ๋ฆฌํด๊ฐ์ผ๋ก ์๋ฌ๋ฅผ ๋ฐํํด ํด๋น ํจ์๋ฅผ ํธ์ถํ ์ฝ๋์์ ์๋ฌ๋ฅผ ์ฒ๋ฆฌํ๋๋ก ํ๋ ๋ฐฉ๋ฒdo-catch ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ต์ ๋ ๊ฐ์ ๋ฐํํ๋ ๋ฐฉ๋ฒassert๋ฅผ ์ฌ์ฉํด ๊ฐ์ ๋ก ํฌ๋์ฌ๋ฅผ ๋ฐ์์ํค๋ ๋ฐฉ๋ฒ์๋ฌ๋ฅผ ๋ฐ์์ํค๋ ํจ์ ์ฌ์ฉํ๊ธฐ์ด๋ค ํจ์, ๋ฉ์๋ ํน์ ์์ฑ์๊ฐ ์๋ฌ๋ฅผ ๋ฐ์์ํฌ ์ ์๋ค๋ ๊ฒ์ ์๋ฆฌ๊ธฐ ์ํด throw ํค์๋๋ฅผ ํจ์ ์ ์ธ.. 2024. 3. 28. [Swift] ์ต์ ๋ ์ฒด์ด๋ ์ต์ ๋ ์ฒด์ด๋nil์ผ ์๋ ์๋ ํ๋กํผํฐ๋, ๋ฉ์๋ ๊ทธ๋ฆฌ๊ณ ์๋ธ์คํฌ๋ฆฝํธ์ ์ง์(query)๋ฅผ ํ๋ ๊ณผ์ ๋ง์ฝ ์ต์ ๋์ด ํ๋กํผํฐ๋ ๋ฉ์๋ ํน์ ์๋ธ์คํฌ๋ฆฝํธ์ ๋ํ ๊ฐ์ ๊ฐ๊ณ ์๋ค๋ฉด ๊ทธ ๊ฐ์ ๋ฐํํจ๋ง์ฝ ๊ฐ์ด nil์ด๋ผ๋ฉด nil ๋ฐํ ๊ฐ์ ์ธ๋ํ์ ๋์ฒด๋ก์จ์ ์ต์ ๋ ์ฒด์ด๋์ต์ ๋ ๊ฐ ๋ค์ ๋ฌผ์ํ(?)๋ฅผ ๋ถ์ฌ์ ํํ ๊ฐ๋ฅ์ต์ ๋์ ์ฌ์ฉํ ์ ์๋ ๊ฐ์๋ ํ๋กํผํฐ, ๋ฉ์๋ ๊ทธ๋ฆฌ๊ณ ์๋น์คํฌ๋ฆฝํธ๊ฐ ํฌํจ์ต์ ๋ ๊ฐ์ ๊ฐ์ ์ธ๋ํํ๊ธฐ ์ํด ๋ค์ ๋๋ํ(!)๋ฅผ ๋ถ์ด๋ ๊ฒ๊ณผ ์ ์ฌ๊ฐ์ ์ธ๋ํ์ ํ๋๋ฐ ๋ง์ฝ ๊ทธ ๊ฐ์ด ์์ผ๋ฉด ๋ฐํ์ ์๋ฌ ๋ฐ์์ต์ ๋ ์ฒด์ด๋์ ์ฌ์ฉํ๋ฉด ๋ฐํ์ ์๋ฌ ๋์ nil์ด ๋ฐํclass Person { var residence: Residence?}class Residence { var numberOfRo.. 2024. 3. 26. ์ด์ 1 ยทยทยท 13 14 15 16 17 18 19 ยทยทยท 64 ๋ค์ ๋ฐ์ํ