배열 속 하나하나를 클로져 안에 parameter로 넣어주어 클로져 안에 있는 body에서 첫번째로 true를 던질 때 그 요소를 가져온다.
즉, closure 안에서 return true가 나올 때까지 계속 반복하고, 안나오면 nil을 내뱉는다.
closure 안에서 false가 나오면 거기서 멈추고 다음 요소로 넘어간다!
대체로 아래와 같이 return을 생략하는 방식으로 많이 사용한다.
let numbers = [3, 7, 4, -2, 9, -6, 10, 1]
let 넘버 = numbers.first { num in
num < 0
}
print(넘버) // Optional(-2)
let 넘버 = numbers.first { num in
return num < 0
}
print(넘버) // Optional(-2)
let numbers = [3, 7, 4, -2, 9, -6, 10, 1]
let 넘버 = numbers.first { num in
guard num > 0 else {
return false
}
print(num)
return num < 0
}
print(넘버) // 3 7 4 9 10 1 nil
private func stockLabel(of fruit: Fruit) -> UILabel? {
return fruitStockLabels.first { stockLabel in
guard let fruitLabel = stockLabel as? FruitLabelProtocol else {
return false
}
return fruitLabel.fruit == fruit
}
}