For 반복문 활용
for item in myArray where item%2 != 0 {
print("홀수: \(item)")
}
- 배열 내에서 where를 활용하여 원하는 요소에 대해서만 활용할 수 있음.
함수
가변 매개변수
func 함수이름(매개변수1이름: 매개변수1타입, 전달인자 레이블 매개변수2이름: 매개변수2타입 ...) -> 반환타입 {
함수 구현
return -
}
func sayHelloToFriends(me: String, friends: String...) -> String {
return "Hello \(friends)! I'm \(me)!"
}
print(sayHelloToFriends(me: "eunji", friends: "hanna", "eric", "wing")
// Hello ["hana", "eric", "wing"]! I'm eunji!
print(sayHelloToFriends(me: "eunji"))
// Hello []! I'm eunji!
Closure
Closure란?
- 코드의 블럭
- 일급 시민(first-citizen)
- 변수, 상수 등으로 저장 가능
- 전달인자로 전달 가능
- 함수: 이름이 있는 클로저
(클로저의 일종임)
정의
# 매개변수가 필요한 경우
{ (매개변수 목록) -> 반환타입 in
실행코드
}
# 매개변수 필요X 경우
{ () -> 반환타입 ㅑn
실행코드
}
활용
var sum: (Int, Int) -> Int = { (a: Int, b: Int) -> Int in
return a+b
}
sumResult = sum(1, 2) // 3
함수의 전달인자로서의 클로저
let add: (Int, Int) -> Int
add = { (a: Int, b: Int) -> Int in
return a + b
}
let substract: (Int, Int) -> Int
substract = { (a: Int, b: Int) -> Int in
return a - b
}
func calculate(a: Int, b: Int, method: (Int, Int) -> Int) -> Int {
return method(a, b)
}
- method인 add, sbstract를 calculate의 매개변수로 넘겨준 것!
var calculated: Int
calculated = calculate(a: 50, b: 50, method: add)
print(calculated) // 100
후행 클로저
- 함수의 마지막 인자가 클로저라면,
마지막 매개변수 이름을 생략하고 함수 소괄호 외부에 클로저 구현 가능.
result = calculate(a: 10, b: 10) { (left: Int, right: Int) -> Int in
return left + right
}
반환 타입 생략
- method에서 반환타입을 가지고 있기 때문에 컴파일러는 어떤 타입으로 반환을 해줘야하는지 알고있음.
따라서, 클로저에서 굳이 반환타입 안 적어줘도 됨.
- in은 절대 생략 불가
# ver1.
result = calculate(a: 10, b: 10, method: { (left: Int, right: Int) in
return left + right
})
# ver2.
result = calculate(a:10, b: 10) { (left: Int, right: Int) in
return left + right
}
단축인자 이름
- 매개변수 이름을 직접 사용하는 것이 아닌
매개변수의 순서대로 $0, $1...로 표현 가능.
- in 생략 가능.
result = calculate(a: 10, b: 10, method: {
return $0 + $1
})
암시적 반환
- 클로저가 반환값이 있으면,
return을 굳이 써주지 않아도 마짐가 줄이 암시적으로 반환값임.
# ver1.
result = calculate(a: 10, b: 10) {
$0 + $1
}
# ver2.
result = calculate(a:10, b: 10) { $0 + $1 }
참고
Closure