์ „์ฒด ๊ธ€

Front-end Developer
Swift

Swift - Navigator Push Present

๐Ÿ“Œ ๋ชฉ์ฐจ ์„œ๋ก  push present back ๐Ÿ“Œ ์„œ๋ก  ์˜ค๋Š˜์€ swift์—์„œ์˜ ํ™”๋ฉด์ „ํ™˜์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ push์™€ present๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ“Œ push push๋Š” ํ™”๋ฉด์ด ์Œ“์ด๋Š” ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘์„ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ navigation์˜์—ญ์— back์ด๋ผ๋Š” ๋ฒ„ํŠผ์ด ์ƒ๊ธฐ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์Šคํ† ๋ฆฌ ๋ณด๋“œ ์ผ๋‹จ ์Šคํ† ๋ฆฌ๋ณด๋“œ์—์„œ ์–ด๋–ป๊ฒŒ ํ•˜๋Š”์ง€ ์•Œ์•„๋ณผ๊นŒ์š”? ๋จผ์ € button์„ ํ•˜๋‚˜ ์ƒ์„ฑํ•ด์ค€๋’ค ์˜ค๋ฅธ์ชฝ ํด๋ฆญ์œผ๋กœ ์›ํ•˜๋Š” view์˜ ์ „ํ™˜ ๋ถ€๋ถ„ ๊นŒ์ง€ ๋“œ๋ ˆ๊ทธ๋ฅผ ํ•ด์ค๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ show๋ผ๋Š” ์˜์—ญ์„ ์„ ํƒ์„ ํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ์•„๋ž˜์˜ ํ™”๋ฉด๊ณผ ๊ฐ™์ด ์ด๋Ÿฐ ์•„์ด์ฝ˜์ด ์ƒ๊ธฐ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ ๊ทธ๋Ÿผ ์ฝ”๋“œ๋กœ๋Š” ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ์š”? @IBAction func tabCodePushButton(_ sender: UIButton) { g..

Swift

Swift - Content Hugging, compression Resistance

๐Ÿ“Œ ๋ชฉ์ฐจ 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

Swift ๊ณ ์ฐจํ•จ์ˆ˜(map, filter, reduce)

๐Ÿ“Œ ๋ชฉ๋ก ๊ณ ์ฐจ ํ•จ์ˆ˜๋ž€? 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

Swift closure

๐Ÿ“Œ ๋ชฉ๋ก 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

Swift try-catch

๐Ÿ“Œ ๋ชฉ๋ก ์—๋Ÿฌ ์ฒ˜๋ฆฌ๋ž€? 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

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

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

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) } } ..

eddie0329
Eddie Sunny's Blog