[Swift] Grammar

Donghee Lee·2022년 1월 10일
0

iOS-Swift

목록 보기
2/20
post-thumbnail

[Swift] Grammar


https://programmers.co.kr/learn/courses/30/lessons/77484

import Foundation

func solution(_ lottos:[Int], _ win_nums:[Int]) -> [Int] {
    let notZeronums = lottos.filter{$0 != 0}
    let winCnt = notZeronums.filter{win_nums.contains($0)}.count
    let min = 0...1 ~= winCnt ? 6 : 7 - winCnt
    let max = 0...1 ~= winCnt + lottos.count - notZeronums.count ? 6 : 7-(winCnt + lottos.count - notZeronums.count)
    
    return [max, min]
}

단축 인자이름

클로저의 매개변수 이름이 굳이 불필요하다면 단축 인자이름을 활용할 수 있습니다.
단축 인자이름은 클로저의 매개변수의 순서대로 $0, $1, $2… 처럼 표현합니다.

result = calculate(a: 10, b: 10, method: {
    return $0 + $1
})
print(result) // 20
// 당연히 후행 클로저와 함께 사용할 수 있습니다
result = calculate(a: 10, b: 10) {
    return $0 + $1
}
print(result) // 20

야곰님

~= 연산자

~= 연산자는 대상이 특정 범위에 속하는지 범위를 체크하는 연산자 입니다.
저희가 많이 사용하는 switch 구문에 바로 이 ~= 연산자가 사용됩니다.
case 의 범위를 확인할 때 내부적으로 ~= 연산자가 불려서 사용되고 있는 것이죠.

~= 연산자는 비교 연산자 == 의 변형? 확장된 상태로 생각할 수 있겠습니다.
두 대상이 같은지 단순 비교할 때 == 연산자와 달리 대상이 어떤 범위에 속하는지 확인합니다.

숫자 5가 0~ 10 사이일 때 10을 곱해주려면 이렇게 할 수 있습니다.

var n = 5
if 0..<10 ~= n {
  n *= 10
}
print(n) // 50

woongsios

profile
Better than Yesterday

0개의 댓글