a ?? b
을 통해 옵셔널 표현식 a
값을 언래핑한다. 값이 없다면 (즉 널이라면) 디폴트 값으로 준 b
를 리턴한다.
a != nil ? a! : b
를 한 단어로 간략화한 게 ??
라고 생각하자.a
가 널이 아니면 b
값은 고려되지 않는다. 곧바로 a
값이 리턴된다.var default_clr = "red"
var defined_clr: String?
var clr = defined_clr ?? default_clr
// if nil then default
(a...b)
를 통해 a
에서 b
까지 범위를 전달하는데, 이때 b
까지의 값을 포함하는 데 주의하자.
파이썬에서는 range가 range(a, b)에서 b-1까지이다.
(a..<b)
를 통해 a
이상 b
미만까지의 범위를 나타낸다.
let arr = [1, 2, 3, 4]
for i in 0..arr.count {
print(arr[i])
// 1, 2, 3, 4 printed
}
파이썬의 range와 동일한 기능이다. 배열 인덱스가 0에서 시작하기 때문에 유용하다.
특정 값에서 시작해 배열의 끝 인덱스까지 추출한다. 시작 방향과 끝 방향 둘 중 한 가지만 설정하면 된다.
for num in arr[2...] {
print(num)
// 3, 4 printed
}
for num in arr[...2] {
print(num)
// 1, 2, 3 printed
}
for num in arr[..<2] {
print(num)
// 1, 2 printed
}
!a
를 통해 a
의 불리언 값 부정a $$ b
를 통해 a
와 b
모두 true일 때 true 반환, 그렇지 않다면 모두 falsea || b
를 통해 a
와 b
모두 false일 때 false 반환, 그렇지 않다면 모두 trueAND와 OR 모두 left-associative한 연산자이기 때문에 모든 변수의 참 거짓을 확인할 필요 없이 변수 하나의 값으로 결과를 특정할 수 있다면 나머지 변수의 값을 확인하지 않는다.
모두 If 문과 같은 조건문에서 주로 사용된다. AND, OR의 경우 어떤 경우에 각 변수가 불리언 값을 가지는지 확인하자. 괄호를 통해서 순서 역시 조절할 수 있고, 가독성을 살리자.