Swift
๐ ๋ชฉ์ฐจ ์๋ก push present back ๐ ์๋ก ์ค๋์ swift์์์ ํ๋ฉด์ ํ์ ๋ํด์ ์์๋ณด๊ฒ ์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก push์ present๊ฐ ์์ต๋๋ค. ๐ push push๋ ํ๋ฉด์ด ์์ด๋ ๋ฐฉ์์ผ๋ก ๋์์ ํฉ๋๋ค. ๊ทธ๋์ ์์ฐ์ค๋ฝ๊ฒ navigation์์ญ์ back์ด๋ผ๋ ๋ฒํผ์ด ์๊ธฐ๊ฒ ๋ฉ๋๋ค. ์คํ ๋ฆฌ ๋ณด๋ ์ผ๋จ ์คํ ๋ฆฌ๋ณด๋์์ ์ด๋ป๊ฒ ํ๋์ง ์์๋ณผ๊น์? ๋จผ์ button์ ํ๋ ์์ฑํด์ค๋ค ์ค๋ฅธ์ชฝ ํด๋ฆญ์ผ๋ก ์ํ๋ view์ ์ ํ ๋ถ๋ถ ๊น์ง ๋๋ ๊ทธ๋ฅผ ํด์ค๋๋ค. ๊ทธ๋ผ show๋ผ๋ ์์ญ์ ์ ํ์ ํด์ฃผ๋ฉด ๋ฉ๋๋ค. ๊ทธ๋ผ ์๋์ ํ๋ฉด๊ณผ ๊ฐ์ด ์ด๋ฐ ์์ด์ฝ์ด ์๊ธฐ๊ฒ ๋ฉ๋๋ค. ์ฝ๋ ๊ทธ๋ผ ์ฝ๋๋ก๋ ์ด๋ป๊ฒ ํด์ผํ ๊น์? @IBAction func tabCodePushButton(_ sender: UIButton) { g..
Swift
๐ ๋ชฉ์ฐจ content hugging compression resistance ์ฐธ๊ณ ๐ content hugging content hugging ์ด๋ ์ฃผ์ด์ง ํฌ๊ธฐ๋ณด๋ค ์์์ง ์ ์์์ ๋ํ๋
๋๋ค. ๋๊ฐ์ ๊ฐ์ content hugging์ด ์์ต๋๋ค. ๋นจ๊ฐ์ ํ๋์ ๋๋ค 251์ priority๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ด๋ ๋นจ๊ฐ์์ 250์ผ๋ก ์ค์ด๊ฒ ๋๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๋ฉ๋๋ค. ๐ compression resistance compression resistance๋ ์ฃผ์ด์ง ํฌ๊ธฐ ๋ณด๋ค ์ปค์ง ์ ์์์ ๋ํ๋
๋๋ค. ์ด๋ ๊ฒ compression resistance์ priority๋ฅผ ์ค๋ค๋ฉด ์ด๋ ๊ฒ ๋ณ๊ฒฝ์ด ๋ ์ ์์ต๋๋ค. ๐ ์ฐธ๊ณ content hugging vs compression resistance
Swift
๐ ๋ชฉ๋ก ๊ณ ์ฐจ ํจ์๋? map filter reduce ๐ ๊ณ ์ฐจ ํจ์๋? ๋ค๋ฅธ ํจ์๋ฅผ ์ ๋ฌ ์ธ์๋ก ๋ฐ๊ฑฐ๋ ํจ์ ์ฑํ์ ๊ฒฐ๊ณผ๋ฅผ ํจ์๋ก ๋ฐํํ๋ ํจ์ swift์์ ์ ๊ณตํ๋ ๊ธฐ๋ณธ์ ์ธ ๊ณ ์ฐจํจ์: map, filter, reduce ๐ map let numbers: [Int] = [0, 1, 2, 3] // ํ์ด์ ์ด ํจ์ //let mapArray = numbers.map { (number) -> Int in // return number * 2 //} // ๊ฐ์ํ let mapArray = numbers.map { $0 * 2 } mapArray // [0, 2, 4, 6] ๐ filter let intArray = [10, 4, 5, 20, 13] let filterArray = intArray.filte..
Swift
๐ ๋ชฉ๋ก closure ์ด๋? ํด๋ก์ ๊ธฐ๋ณธ ์ฌ์ฉ Example parameter with closure ๋ค์ค ์ธ์ ํด๋ก์ ธ ํด๋ก์ ธ ๊ฐ์ํ ํ๊ธฐ ๐ closure ์ด๋? ์ฝ๋์์ ์ ๋ฌ ๋ฐ ์ฌ์ฉํ ์ ์๋ ๋
๋ฆฝ ๊ธฐ๋ฅ ๋ธ๋ก์ด๋ฉฐ, ์ผ๊ธ ๊ฐ์ฒด์ ์ญํ ์ ํ ์ ์์ ์ผ๊ธ ๊ฐ์ฒด๋? ์ ๋ฌ ์ธ์๋ก ๋ณด๋ผ ์ ์๊ณ , ๋ณ์/์์ ๋ฑ๋ฅด๋ก ์ ์ฅํ๊ฑฐ๋ ์ ๋ฌํ ์ ์์ผ๋ฉฐ, ํจ์์ ๋ฐํ ๊ฐ์ด ๋ ์๋ ์๋ค! ๐ ํด๋ก์ ๊ธฐ๋ณธ ์ฌ์ฉ { (๋งค๊ฐ๋ณ์) -> ๋ฆฌํด ํ์
in ์คํ ๊ตฌ๋ฌธ } ๐ Example let hello = { () -> () in print("Hello") } hello() let hello2 = { (name: String) -> String in return "Hello, \(name)" } // hello2(name: "..
Swift
๐ ๋ชฉ๋ก ์๋ฌ ์ฒ๋ฆฌ๋? Example ํจ์ ์์์ ์ฒ๋ฆฌ do try catch ๊ฐ ์ ๋ฌ ๋ฐ๊ธฐ ๐ ์๋ฌ ์ฒ๋ฆฌ๋? ํ๋ก๊ทธ๋จ ๋ด์์ ์๋ฌ๊ฐ ๋ฐ์ํ ์ํฉ์ ๋ํด ๋์ํ๊ณ ์ด๋ฅผ ๋ณต๊ตฌํ๋ ๊ณผ์ ๐ Example ์๋ฌ๋ฅผ ๋ฐ์ ์ํค๋ ค๋ฉด ์ด๋ ๊ฒ ํด์ฃผ๋ฉด ๋ฉ๋๋ค. enum PhoneError: Error { case unknown case batteryLow(batteryLevel: Int) } throw PhoneError.batteryLow(batteryLevel: 20) // Error! ๐ ํจ์ ์์์ ์ฒ๋ฆฌ // throws ๋ค์๋ ๋ฆฌํด ํ์
func checkPhoneBatteryStatus(batteryLevel: Int) throws -> String { guard batteryLevel != -1 else {..
Swift
๐ ๋ชฉ๋ก ์ต์
๋ ์ฒด์ด๋ ์ด๋? Example ๐ ์ต์
๋ ์ฒด์ด๋ ์ด๋? ์ต์
๋์ ์ํด ์๋ nil ์ผ์ง๋ ๋ชจ๋ฅด๋ ํ๋กํผํฐ, ๋ฉ์๋, ์๋ธ์คํฌ๋ฆฝ์
๋ฑ์ ๊ฐ์ ธ์ค๊ฑฐ๋ ํธ์ถํ ๋ ์ฌ์ฉํ ์ ์๋ ์ผ๋ จ์ ๊ณผ์ ๐ Example struct Developer { let name: String } struct Company { let name: String var developer: Developer? } var developer = Developer(name: "Sam") var company = Company(name: "Eddie", developer: developer) print(company.developer) // company.developer.name -> Error! print(company.deve..
Swift
๐ ๋ชฉ๋ก ์ด๊ฑฐํ ์ด๋? ๊ธฐ๋ณธ ๋ฌธ๋ฒ ๊ธฐ๋ณธ๊ฐ ๋ณ๊ฒฝ ํ ๋น ๋ฌธ๋ฒ ์ฐ๊ด ๊ฐ ๋ช
์ ๐ ์ด๊ฑฐํ ์ด๋? ์ฐ๊ด์ฑ์ด ์๋ ๊ฐ์ ๋ชจ์ ๋์ ๊ฒ์ ๋งํ๋ค. ๐ ๊ธฐ๋ณธ ๋ฌธ๋ฒ enum CompassPoint: String { case north case south case east case west // case north, south, east, west -> ์ด๋ ๊ฒ ํ์ค๋ก๋ ํ๊ธฐ ๊ฐ๋ฅํฉ๋๋ค. } var direction = CompassPoint.east // east direction = .west // west -> ์ฌ๊ธฐ์ ํ์
์ถ๋ก ์ด ์ด๋ฏธ ๊ฐ๋ฅํด์ก๊ธฐ ๋๋ฌธ์ .์ผ๋ก๋ง ์ ๊ทผ์ด ๊ฐ๋ฅ ๐ ๊ธฐ๋ณธ ๊ฐ ๋ณ๊ฒฝ ๊ธฐ๋ณธ๊ฐ์ ์ด๋ ๊ฒ ๋ณ๊ฒฝ์ ํด์ฃผ๋ฉด ๋ฉ๋๋ค. enum CompassPoint: String { case north = "๋ถ" case..
Swift
๐ ๋ชฉ๋ก What is extension ๊ธฐ๋ณธ ์ฌ์ฉ Example ๐ What is extension ๊ธฐ์กด์ ํด๋์ค, ๊ตฌ์กฐ์ฒด, ์ด๊ฑฐํ, ํฌ๋กํ ์ฝ์ ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ ๊ธฐ๋ฅ, ๋ค๋ง ์ค๋ฒ๋ผ์ด๋๋ ๋ถ๊ฐ๋ฅ ํฉ๋๋ค. ๐ ๊ธฐ๋ณธ ์ฌ์ฉ extension SomeType { // ์ถ๊ฐ ๊ธฐ๋ฅ } ๐ Example extension Int { var isEven: Bool { return self % 2 == 0 } var isOdd: Bool { return self % 2 == 1 } } var number = 3 number.isEven // false number.isOdd // true extension String { func convertToInt() -> Int? { return Int(self) } } ..