first(where:)
Array์ ์ธ์คํด์ค ๋ฉ์๋์ด๋ค.
์๊ฐ๋ณด๋ค ์ ๋ง ๋ง์ ๊ณณ์์ ์ฝ๋๊ฐ ์ฌ์ฉ๋์ด์ ์ด๋ฒ์ ์ ๋ฆฌํด์ผ๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์๋ค.
์ ์
func first(where predicate: (Element) throws -> Bool rethrows -> Element?
Parameter
predicate
- ์ํ์ค์ ์์๋ฅผ ์ธ์๋ก ์ฌ์ฉํ๊ณ ์์๊ฐ ์ผ์นํ๋์ง ์ฌ๋ถ๋ฅผ ๋ํ๋ด๋ ๋ถ์ธ ๊ฐ์ ๋ฐํํ๋ ํด๋ก์ .
Return
- Predicate๋ฅผ ๋ง์กฑํ๋ ์ฒซ ๋ฒ์งธ ์์๋ฅผ ๋ฐํํ๊ฑฐ๋, ์๋ค๋ฉด nil์ ๋ฐํํ๋ค.
Example 1 (Apple ๊ณต์ ๋ฌธ์)
let numbers = [3, 7, 4, -2, 9, -6, 10, 1]
if let firstNegative = numbers.first(where: { $0 < 0 }) {
print("The first negative number is \(firstNegative).")
}
// Prints "The first negative number is -2."
numbers๋ผ๋ ์ํ์ค(<<๋ฐฐ์ด)์์ ์์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์ฒซ ๋ฒ์งธ ์์๋ฅผ ๋ฐํํ๋ค.
first
๋ค์์ ์ธ์คํด์ค ํ๋กํผํฐ์ด๋ค.
์ปฌ๋ ์ ์ ์ฒซ ๋ฒ์งธ ์์๋ฅผ ๋ํ๋ธ๋ค.
Discussion
- ์ปฌ๋ ์ ์ ์์๊ฐ ์๋ค๋ฉด ์ฒซ ๋ฒ์งธ ์์๋ฅผ ๊ฐ์ง๊ณ , ์ปฌ๋ ์ ์ด ๋น์ด์๋ค๋ฉด nil์ ๊ฐ์ง๋ค.
- ๋ฐฐ์ด์ ํญ์ ๊ฐ์ด ์์ ์๋ ์๊ณ , ์์ ์๋ ์๋ ๊ฐ๋ฅ์ฑ์ ๋ดํฌํ๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ Subscript๋ ๋ฒ์(Range<>)๋ก ์ ๊ทผํ๋ ๊ฒ์ ์ํํ ์ ์๋ค. ์ฒซ ๋ฒ์งธ ์์์ ์ ๊ทผํ๋ ๊ฒ์ด๋ผ๋ฉด first ํ๋กํผํฐ๋ฅผ ์ด์ฉํ๋ ๊ฒ์ด ๋ ์์ ํ๋ค. (cf. ๋ง์ง๋ง ์์๋ last ํ๋กํผํฐ ์ฌ์ฉ)
Example 1(Apple ๊ณต์ ๋ฌธ์)
let numbers = [10, 20, 30, 40, 50]
if let firstNumber = numbers.first {
print(firstNumber)
}
Example 2
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
super.touchesBegan(touches, with: event)
if let touch = touches.first, // โ
touch ๊ฐ์ฒด ๊ฐ์ ธ์ค๋ ์ํฉ
touch.view == self.view {
dismiss(animated: true)
}
}