Writing functions
아래와 같이 func뒤에 function의 이름을 선언하고 {}안에 코드를 작성하면 맨 아래처럼 이 function을 call해주면 {}안의 코드가 실행됨.
func functionName() {
Code
}
functionName()
Accepting parameters
function의 이름 뒤 ()에 parameter를 지정해줄 수 있음.
(parameterName: data type)
func square(number: Int) {
print(number * number)
}
returning values
func square(number: Int) -> Int {
return value
}
-> 뒤에 있는 타입으로 반환한다는 말
따라서 value는 Int 타입이 되어야함.
Parameter labels
parameter를 선언할 때 띄어쓰기를 이용해 아래처럼 선언할 수 있음.
func sayHello( to name: String) {
print(“Hello, \(name)”)
}
sayHello(to: “Taylor”)
이때 to는 externally하게 쓰이고, name은 internally하게 쓰임.
Omitting parameter labels
_를 이용하여 parameter를 생략할 수 있는데 혼란이 생길 수 있기에 써주는게 좋음.
func greet(_ person: String) {
print(“Hello, \(person)!”)
}
greet(“Taylor”)
Default parameter values
함수를 선언할 때 default값을 같이 정해줄 수 있음.
func greet(_ person: String, nicely: Bool = true) {
Code
}
nicely parameter에 default값으로 true를 줌.
Variadic functions
…을 이용해 여러 개의 값을 받을 수 있음
func square(numbers: Int…) {
for number in numbers {
print(“\(number * number)”)
}
}
square(numbers: 1, 2, 3, 4)
Writing throwing function
bad input이나 코드 내에서 잘못 진행되고 있을 경우 throws를 이용하여 예외를 던질 수 있음.
enum PasswordError: Error {
case obvious
} //type을 Error로.
func checkPassword(_ password: String) throws -> Bool {
if password == “password” {
throw PasswordError.obvious
}
return true
}
위 처럼 예외를 던짐.
일관된 주제를 표현하므로 enum 이용하는 것이 적절.
throws와 throw인 것 확인!!
Running throwing functions
위 코드에서 던진 오류를 do - try - catch를 이용해 처리를 함.
do { try checkPassword(“password”)
print(“good”) } catch {
print(“not good”)
}
에러를 던졌을 때 catch안의 코드를 실행하여 예외를 처리함.
inout parameters
함수 안에서 parameter 값을 바꾸고 싶을 경우엔 inout사용
다른 값을 넣을 때 &를 이용함.
func doubleInPlace(number: inout Int) {
number *= 2
}
var myNum = 10
doubleInPlace(number: &myNum)