๐ฅ ๋ฐฐ์ด ์ ์ฃผ์ด์ง ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์์ ์ฐพ๊ธฐ
first๋ฌธ
- ๋ฐฐ์ด ์ ํ๋ํ๋๋ฅผ ํด๋ก์ ธ ์์ parameter๋ก ๋ฃ์ด์ฃผ์ด ํด๋ก์ ธ ์์ ์๋ body์์ ์ฒซ๋ฒ์งธ๋ก true๋ฅผ ๋์ง ๋ ๊ทธ ์์๋ฅผ ๊ฐ์ ธ์จ๋ค.
- return์ ์๋ตํ๋ ๋ฐฉ๋ฒ
- return์ ์๋ตํ์ง ์๋ ๋ฐฉ๋ฒ
- ์ฆ, 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)
- ๊ทธ๋ฌ๋, ์๋์ ๊ฐ์ด return์ ์๋ตํ์ง ์๋ ๋ฐฉ๋ฒ๋ ์กด์ฌํ๋ค.
let ๋๋ฒ = numbers.first { num in
return num < 0
}
print(๋๋ฒ) // Optional(-2)
- ์๋์ ์ฝ๋์์ guard๋ฌธ์ ํต๊ณผํ์ง ๋ชปํ๋ฉด return false๋ก ๋์ด๊ฐ๊ฒ ๋๋ฏ๋ก ๋ค์ ์์๋ฅผ ์ฒดํฌํ๋ฌ ๋ฐ๋ก ๋์ด๊ฐ๋ค.
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
- ๊ทธ๋ฌ๋ฉด, ์๋์ ์ค์ ์ฝ๋๋ฅผ ๋ถ์ํด๋ณด์.
- ๋จผ์ , ํ์
์บ์คํ
์ด ๋ถ๊ฐ๋ฅํ๋ฉด return false๋ก ๋ฐ๋ก ๋ค์ stockLabel๋ก ๋์ด๊ฐ๊ฒ ๋๋ฉฐ, guard๋ฌธ์ ํต๊ณผํ์๋ค๊ณ ํ์ฌ๋, fruitLabel.fruit != fruit์ด๋ผ๋ฉด, return false์ด๋ฏ๋ก ๋ค์ stockLabel๋ก ๋์ด๊ฐ๊ฒ๋๋ค.
- ์ต์ข
์ ์ผ๋ก return fruitLabel.fruit == fruit ⇒ return true ๋ฅผ ๋ง์กฑํ๋ ์๊ฐ ๋ ์ด์์ stockLabel ํ์์ ์ข
๋ฃ๊ฐ๋๊ณ first๋ฌธ์ ์ข
๋ฃ๊ฐ๋๋ค.
- ์ฆ, return false๋ผ๊ณ first๋ฌธ ์์ฒด๊ฐ ์ข
๋ฃ๋๋ ๊ฒ์ด ์๋๋ผ, ๋ค์ stockLabel๋ก ๋์ด๊ฐ๊ฒ๋๋ ๊ฒ์ด๋ค.
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
}
}