๐ iOS/Swift
[Swift] self
self.ํ๋กํผํฐ๋ช // ํด๋์ค๋ ๊ตฌ์กฐ์ฒด ์์ ์ ์ธ์คํด์ค์ ์ํ ํ๋กํผํฐ self ํค์๋๋ ์๋ต์ด ๊ฐ๋ฅํ์ง๋ง, ๋ง์ฝ ํ๋กํผํฐ์ ์ผ๋ฐ ๋ณ์์ ์ด๋ฆ์ด ๊ฐ์ ๊ฒฝ์ฐ ๊ตฌ๋ถ์ ์ํด์ self๋ฅผ ๊ผญ ์จ์ฃผ์ด์ผํ๋ค. class A { var name: String init(name: String) { self.name = name } } ์ด๋์ ๋ผ์ด์ ๋ด๋ถ์ ์๋ name ์ ์ง์ญ๋ณ์ > ๋งค๊ฐ๋ณ์ > ์ธ์คํด์ค ํ๋กํผํฐ ์์๋ก ๋ฌด์์ ์ง์นญํ๋์ง ์ฐพ์. ๊ทธ๋์ name = name ์ ๊ฒฝ์ฐ ๋๊ฐ ๋ค ๋งค๊ฐ๋ณ์๋ฅผ ์ง์นญํ๊ฒ ๋จ. ์ด๋, ์ธ์คํด์ค ํ๋กํผํฐ๋ก ์ง์นญํ๊ธฐ ์ํด์ self๋ฅผ ์ฌ์ฉํจ.
[Swift] Guard๋ฌธ๊ณผ If๋ฌธ
guard์ if์ ์ฐจ์ด๋ guard๋ ํญ์ else๋ฌธ์ ๊ฐ๋๋ค๋ ๊ฒ์ด๋ค. ⇒ else๋ฌธ์ ๊ฐ์ ํ๊ธฐ ๋๋ฌธ์ ์์ธ์ฒ๋ฆฌ์ ์ฉ์ดํ๋ค! func guardTest(person: [String: String]) { guard let name = person["name"] else { // else ๋ฅผ ์์ฐ๋ฉด compile error print("person is nil") return } print("Name: \\(name)") guard let location = person["location"] else { print("location is nil") return } print("Location: \\(location)") } guardTest(person: ["name": "Jedi"]) print() g..
[Swift] reduce ์ฌ์ฉํ๊ธฐ | sum
Programmers ํ์ค๋ ์๋ฅผ ํ๊ณ ๋์, reduce๋ฅผ ์ด์ฉํ ํ์ด๋ฅผ ๋ง์ฃผ์ณ๋ฒ๋ ธ๋ค. // Programmers ํ์ค๋ ์ ํ์ด func solution(_ x:Int) -> Bool { var sum_x = String(x).map{ Int(String($0))! }.reduce(0, +) return x % sum_x == 0 } ใ ใ .. ๋๋ ๊ณต๋ถํด์ค๊ฒ reduce ์ปจํ ์ด๋ ๋ด๋ถ์ ๊ฐ์ ํ๋๋ก ํตํฉ(์ฐ์ฐ)ํ์ฌ return * Swift์์๋ Python๊ณผ๋ ๋ฌ๋ฆฌ ๋ฐฐ์ด์ ์ด ํฉ์ ๊ตฌํ๋ ๋ด์ฅ ํจ์ sum์ด ์๋ค. ๋์ reduce๋ฅผ ์์ฉํด์ฃผ๋ฉด ๋๋ค. (1) reduce(_: _:) public func reduce(_ initialResult: Result, _ nextPartialResult: (..
[Swift] map, flatMap, compactMap ?
Map, flatMap, compactMap map ๋ฐฐ์ด ๋ด๋ถ์ ๊ฐ์ ํ๋์ฉ mapping ๊ฐ ์์์ ๋ํ ๊ฐ์ ๋ณ๊ฒฝํ๊ณ ์ ํ ๋ ์ฌ์ฉํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ค์ ๋ฐฐ์ด์ ์ํ๋ก ๋ฐํ func map(_ transform: (String) throws -> T) rethrows -> [T] import Foundation let cast = ["Vivien", "Marlon", "Kim", "Karl"] let lowercaseNames = cast.map { $0.lowercased() } print(lowercaseNames) // ["vivien", "marlon", "kim", "karl"] let letterCounts = cast.map{ $0.count } print(letterCounts) // [6..
[Swift] inout? | ํจ์ ๋ด๋ถ์์ ํ๋ผ๋ฏธํฐ์ ๊ฐ์ ๋ณ๊ฒฝํ๊ณ ์ง์ํ๊ธฐ
What is inout? Swift์์ ํจ์์ ํ๋ผ๋ฏธํฐ๋ ์์์ด๋ฏ๋ก ํจ์ ๋ด๋ถ์์ ํ๋ผ๋ฏธํฐ์ ๊ฐ์ ๋ณ๊ฒฝ ๋ถ๊ฐ ํจ์์์ ํ๋ผ๋ฏธํฐ์ ๊ฐ์ ๋ณ๊ฒฝํ๊ธธ ์ํ๊ณ + ๋ณ๊ฒฝ๋ ๊ฐ์ด ํจ์ ํธ์ถ์ด ์ข ๋ฃ๋ ํ์๋ ์ง์๋๊ธธ ์ํ ๋ inout ์ฌ์ฉ ํ๋ผ๋ฏธํฐ๋ก ๋ณ์์ ์ฃผ์๊ฐ์ ๋๊ฒจ ์ง์ ์ ๊ทผํ ์ ์๋๋ก ํด์ฃผ๋ ๊ธฐ๋ฅ func increment(_ number: Int){ number += 1 print(number) } increment(3) // Error: 'number' is a 'let' constant var number = 3 func increment(_ number: inout Int){ number += 1 print(number) } increment(&number) // 4 How to use inout?..
[Swift] Protocols | Delegate๋ฅผ ์ด์ง ๊ณ๋ค์ธ
ํ๋กํ ์ฝ์ด๋? ํ๋กํ ์ฝ: ์ต์ํ์ผ๋ก ๊ฐ์ ธ์ผํ ํ๋กํผํฐ์ ๋ฉ์๋๋ฅผ ์ ์ํ๋ ๊ฒ์ด๋ค. ํด๋น Object๊ฐ task๋ฅผ ์ํํ๊ธฐ ์ํด ๋ฐ๋์ ๊ตฌํํด์ผํ๋ ๊ฒ์ ์ ์ํด์ค๋ค. Java์ interface์ ๋น์ทํ ์ญํ ์ ํ๋ค. protocol์ ์ ์ธ์ด๊ณ , type์์ ๊ตฌํํด์ค์ผํ๋ค. ex1) Swift์์ ์ ๊ณตํ๋ ํ๋กํ ์ฝ ์์ ์ค ํ๋์ธ CustomStringConvertible์ ์ฌ์ฉํ ์ฝ๋ ์ฌ์ฉ์๊ฐ ์ง์ ํ ํ๋๋ก class๋ฅผ ์ถ๋ ฅํ ์ ์๋ค. var greeting = "Hello, playground" class person: CustomStringConvertible { let name: String let age: Int let isFemale: Bool init(name: String, age: Int..
[Swift] Guard๋ฌธ | guard let
Guard๋ฌธ์ ๋ฐ๋์ ์์ด์ผ ํ ์กฐ๊ฑด์ ๊ฒ์ฌํ์ฌ ๊ทธ ๋ค์์ ์ค๋ ์ฝ๋๋ค์ ์คํํ ์ง ๋ง์ง ๊ฒฐ์ ํ๋ค. Guard๋ฅผ ์ด์ฉํ๋ ์ด์ ๋ฅผ ์ ๋ฆฌํ์๋ฉด ์๋์ ๊ฐ๋ค. 1. control flow์ indentation์ ๋จ์ํ๊ฒ ํ๊ธฐ์ํด → ์ฝ๋๊ฐ ๊น๋ํด์ง๊ณ ๊ทธ๋ก ์ธํด ์๋ฌ๋ฅผ ๋ฐฉ์งํ ์ ์๋ค. 2. ๋ถ์ ์ ํ ํ๋ผ๋ฏธํฐ๋ฅผ ๋น ๋ฅด๊ฒ ์์ ๋ฒ๋ฆฌ๊ธฐ ์ํด if๋ฌธ vs guard๋ฌธ if๋ฌธ ์ฌ์ฉ ver. func singHappyBirthday(){ if(birthdayIsToday){ if(invitedGuests > 0){ if (cakeCandleLit){ print("Happy Birthday to you!") }else{ print("์ผ์ต ์ด๋ถ ๋ถ ์์ผ์ง") } }else{ print("์ด๋ ์๋ฌด๋ ์ํจ") } }else{ p..
[Swift] Optionals
๋๋ค๋ฆฌ๋ ๋๋ค๊ฒจ๋ณด๊ณ ๊ฑด๋์. Optional: ๋ฐ์ดํฐ๊ฐ ์์ ์๋ ์๊ณ ์์ ์๋ ์๋ ์ํ๋ฅผ ๋ํ๋ด๋ ๊ฒ Optional์ ์ฌ์ฉํ ๋๋ 2๊ฐ์ง Case๊ฐ ์๋ค. (1) ์ด๋ค ๊ฐ์ด ์์ด์ ๊ทธ ๊ฐ์ ์ธ ์ ์๋ ๊ฒฝ์ฐ (2) ์์ ๊ฐ์ด ์์ด์ ์ ๊ทผํ์ง ๋ชปํ๋ ๊ฒฝ์ฐ - nil: ์์ง ๊ฐ์ด ์๋ค. โป ํ์์ ๋ฐ๋ผ์ ๋งค๊ฐ๋ณ์๋ฅผ ์ต์ ๋๋ก ๋ฐ๋ ํจ์๋ฅผ ๋ง๋ค ์๋ ์๋ค. ์ต์ ๋์ ์ ์ํ๋ ๋ฒ Optional์ ์ ์ํ ๋๋ ์ด๋ค Type ๋ค์ ?๋ฅผ ๋ถ์ด๋ฉด ๋๋ค. ์ด ๋, Optional์ ์ธ ๋๋ ์ด๋ค ๊ฐ์ด ๋ค์ด์ฌ์ง ๋ชจ๋ฅด๊ธฐ์ Type - Inferring์ด ์๋๋ฏ๋ก Type์ ๋ฐ๋์ ๋ฃ์ด์ค์ผํ๋ค. Optional์์ ๊ฐ์ด ์๋์ง ํ์ธํ๊ณ ๊ฐ์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ | Optional Binding let userInputAge..