개발_iOS/스위프트

[Swift] 100 Days of Swift - Day 5 정리

sophie_l 2022. 3. 26. 23:54

https://www.hackingwithswift.com/100/5

 

Day 5 – 100 Days of Swift

Follow the 100 Days of Swift and learn to build apps for free.

www.hackingwithswift.com

부랴부랴 3일치를 몰아 들으면서 느낀 점은, 파이썬에 없는 개념들이 굉장히 많이 나온다는 것. 달라봤자 얼마나 다르겠어 생각하고 은연중에 만만하게 보고 있었는데 글쎄, 생각했던 것보다 훨씬 많이 다른 느낌이다. 강의를 듣는 것은 1분이면 끝이지만, 이해하기 위해 곱씹고 필기하고 문제까지 푸는 것을 다 합하면 시간이 생각보다 많이 소요된다. 지금은 너무나도 생소하고 낯선 개념들이지만 나중에 익숙하게 체화해서 코드에 활용하면 훨씬 효율적으로 쓸 수 있겠지 하는 생각으로 견디고 있다. 우선은 기본 문법을 며칠 내로 끝낸 후 작은 프로젝트 위주로 실전 감각을 익혀나가야겠다.

 

1. 함수명 뒤에 ()를 반드시 붙여줄 것

func funcname() {
//codes
}

2. 리턴 값이 있는 함수일 때는 반드시 "-> (리턴값 타입)" 명시해주기: 안 그럴 경우 리턴값 없는 함수가 되어 오류가 발생함

 

3. parameter의 이름을 정할 때 함수 내부에서 쓰이는 이름과 외부에서 호출할 때 쓰이는 이름을 따로 설정해줄 수 있음

func sayHi(to name: String) {
	print("Hi \(name)")
}

sayHi(to: "baby")

// 이 경우 내부에서는 name, 외부에서는 to로 받아준다.

4. parameter에 대해 external name을 주지 않을 수도 있다.

func sayHi(_ name: String) {
	print("Hi \(name)")
}

sayHi("baby")

// 그렇지만 external name을 주는 편이 이해하기 더 쉬움.
// 한편, external name을 붙여놓고 언급 없이 호출하면 안됨

5. 디폴트값이 있는 파라미터

func sayHi(_ name: String, friend: Bool = true) {
	if friend {
    		print("Hi \(name)")
        } else {
    		print("Hi stranger")
	}
}

sayHi("baby")
sayHi("noone", friend: false)

// 첫 번째 호출의 경우, friend는 디폴트인 true가 된다. 두 번째는 false로 명시해줬다.

⭐️ 6. variadic: accepting any number of parameters of the same type. 함수 안에서는 배열로 변환된다. 타입 다음에 ...을 써주면 된다.

func square(numbers: Int...) {
	for number in numbers {
    // codes
    }
}

// 호출시 빈 값으로 넘길 수도 있음.

⭐️ 7. throw: 리턴 타입 전에 throws를 적어주고, 오류가 생길 경우 throw 키워드를 사용함으로써 함수를 throw할 수 있다. 그러기 위해서는 우선 스위프트에 존재하는 에러 타입을 명시하는 enum을 정의해야 한다.

enum PasswordError: Error {
	case obvious
}

func checkPassword(_ password: String) throws -> Bool {
	if password == "1234" {
    		throw PasswordError.obvious
        }
        return true
}

// 문제가 생길 경우 throw됨

⭐️ 8. throw와 함께 쓰는 do, try, catch문: 에러가 발생하여 throw되면 catch블락이 실행됨.

do {
	try checkPassword("1234")
	print("safe password")
} catch {
	print("not a safe password")
}

// throwing 함수를 호출할 때는 반드시 try 구문에서.

⭐️ 9. inout parameters: 함수에 parameter로 들어오는 것들은 모두 상수이므로 값을 바꿀 수 없다. 값을 바꿀 수 있는 변수를 함수의 파라미터로 사용하고 싶으면 inout parameter를 사용하면 된다. 함수 내부에서 변경된 값은 함수 바깥의 원래의 값에도 영향을 줘, 동시에 바뀌게 됨

func doubleNum(number: inout Int) {
	number *= 2
}

var myNum = 5
doubleNum(number: &myNum)

/* 호출시 변수를 먼저 만들어준 후, &기호와 함께 파라미터를 pass해줘야 함.
&표시는 해당 인수가 inout으로 쓰이고 있다는 explicit한 표시이다. */