Swift
[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..
[Swift] ๊ธธ์ด๊ฐ ์ ํด์ง ๋ฆฌ์คํธ ๋ง๋ค๊ณ 0์ผ๋ก ์ด๊ธฐํํ๊ธฐ
Array: repeating repeating์ด๋ผ๋ ํจ์๋ฅผ ์ด์ฉํด์ ์ํ๋ ๊ฐ์๋งํผ ๋ฐ๋ณตํ์ฌ ํน์ ๊ฐ์ array ์์ ๋ฃ์ด์ค ์ ์๋ค. - ํน์ ์์น์ ๊ฐ์ด ์์ผ๋ฉด ์ฑ์ด crash ๋ ๊ฒฝ์ฐ, ์ด๋ฌํ ๋ฐฉ๋ฒ์ ์ด์ฉํ์ฌ ํน์ ์ธ๋ฑ์ค๊น์ง๋ ๊ฐ์ด ์๋ค๋ ๊ฒ์ ํ์ ํ ์ ์๋ค. var myArray = [Int](repeating: 0, count: 100)
[Swift] Class์ Inheritance(์์)
Inheritance A parent class = 'Superclass' A child class = 'Subclass' ์ํผ ํด๋์ค ์์ด ์ ์ํ ํด๋์ค = 'Base class' class Bicycle: Vehicle { var hasBasket = false } let bicycle = Bicycle() bicycle.hasBasket = true Override property์ method๋ ์ค๋ฒ๋ผ์ด๋ ํ ์ ์๋ค. ์๋ ์๋ ์์ฑ์ ์ฌ๋ผํ์ ๋ฐ๊ฟ ์ ์์. ํจ์ ์ด๋ฆ ์์ override ํค์๋๋ฅผ ๋ถ์ด๋ฉด ์ฌ์ฉ ๊ฐ๋ฅ. class Train: Vehicle{ override func makeNoice(){ print("Choo Choo!") } } Reference class Person{ le..
[Swift] Structure
โป convention: ๊ตฌ์กฐ์ฒด์ ์ด๋ฆ์ ๋๋ฌธ์, ๊ทธ ์์ property๋ method๋ค์ ์๋ฌธ์, ์ธ์คํด์ค๋ฅผ ๋ง๋ค ๋๋ ์๋ฌธ์ instance ์ธ์คํด์ค ์ธ์คํด์ค๋ฅผ ๋ง๋ค๋ ค๋ฉด ์ด๊ธฐํ๋ฅผ ํด์ผํ๊ณ ๊ฐ๊ฐ์ ์ธ์คํด์ค๋ structure์ ๋ชจ๋ ํ๋กํผํฐ์ ๊ธฐ๋ฅ๋ค์ ๊ฐ์ง๊ฒ ๋๋ค. struct User { static var currentUser: User = User(userName: "Default", email: "Default", age: 0) var userName: String var email: String var age: Int static func logIn(user: User){ currentUser = user } } let me = User(userName: "Harry", email: "djk..
[Swift] ๋ฐ์ดํฐ ํ์ ์ผ๋ก์์ ํจ์
Swift๋ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ ํฌํจํ๋ ๋ค์ค ํจ๋ฌ๋ค์ ์ธ์ด ์ค์ํํธ์ ํจ์๋ ์ผ๊ธ๊ฐ์ฒด์ด๋ฏ๋ก ๋ณ์, ์์ ๋ฑ์ ์ ์ฅ์ด ๊ฐ๋ฅํ๊ณ ๋งค๊ฐ๋ณ์๋ฅผ ํตํด ์ ๋ฌํ ์๋ ์๋ค. ํ์ ์ด ๋ค๋ฅธ ํจ์๋ ํ ๋นํ ์ ์๋ค. (๋งค๊ฐ๋ณ์ 1ํ์ , ๋งค๊ฐ๋ณ์2ํ์ ...) -> ๋ฐํํ์ func greeting(to friend: String, from me: String){ print("Hello \(friend)! I'm \(me)") } var someFunction: (String, String) -> Void = greeting(to:from:) someFunction("a","finit") // someFunction ์์ฒด๊ฐ ํจ์์ด๊ธฐ์ ํธ์ถ ๊ฐ๋ฅ // Hello a! I'm finit. someFunction = ..