swift에서는 산술연산자, 논리연산자, 범위연산자를 지원
연산자에는 단항(unary), 이항(binary), 삼항(ternary) 연산자가 있습니다.
할당연산자는 값을 초기화 시키거나 변경합니다. 상수와 변수 모두에 사용 가능합니다
let b = 10
var a = 5
a = 5
// a 값은 10
튜플을 활용한 여러 값 할당
let (x, y) = (1, 2)
// x는 1, y 값은 2가 됩니다.
a % b와 같이 나머지 연산
9 % 4 // 1
6 % 4 // 2
-9 % 4 // -1
숫자값은 -로 표현되는 단항 음수 연산자에 의해 부호가 변경
let five = 5
let minusFive = -5
let plusFive = -minusFive // 5
+로 표현되는 단항 양수 연산자는 부호에 아무런 영향을 끼치지 않습니다.
let minusFive = -5
let alsoMinusFive = +minusFive
a = a + 2 와 같이 할당연산(=)과 덧셈연산(+)으로 구성된 연산을 합성해 += 형태로 축약해 사용
var one = 1
one += 2 // one = 3
let name = "Wody"
if name == "Wody" {
print("hello Wody")
} else {
print("Who are you \(name)?")
}
question ? answer1 : answer2 // question 조건이 참인경우 answer1, 거짓인 경우 answer2 실행 고로 아래 코드의 축약과 같다.
if question {
answer1
} else {
answer2
}
nil 병합 연산자는 a ?? b 형태를 갖는 연산자. 옵셔널 a를 벗겨서(unwraps) 만약 a가 nil 인경우 b를 반환합니다. 이 nil 병합 연산자는 다음 코드의 축약형입니다.
a != nil ? a! : b
// 개별적인 해석
(a != nil) a의 값이 nil이 아니다
true -> a! 실행( a를 강제 unwraps 한 값을 반환
false -> b 값 반환
for index in 1...5 {
print(index)
}
// 1
// 2
// 3
// 4
// 5
for index 1..<6 {
print(index)
}
// 1
// 2
// 3
// 4
// 5
[a..][..a] 의 형태. 시작 혹은 끝만 지정해 사용해주는 범위 연산자.
let names = ["Wody", "James", "Jack", "Alex", "Anna"]
for name in names[2...] {
print(name)
}
// Jack
// Alex
// Anna
for name in names[...2] {
print(name)
}
// Wody
// James
// Jack
Swift에서는 세가지 표준 논리 연산자를 지원합니다.
let isBool = false
if !isBool {
print("Logical NOT work")
}
// Prints "Logical NOT work"
let conditionA = true
let conditionB = false
if conditionA && conditionB {
print("pass")
} else {
print("nonPass")
}
// Prints "nonPass"
let A = true
let B = false
if A || B {
print("pass")
} else {
print("nonPass")
}
// Prints "pass"
두 개 이상의 논리 연산자를 조합해 사용할 수 있음. &&와 ||는 왼쪽의 표현을 우선해서 논리 계산함.
let A = true
let B = true
let C = false
let D = false
if A && B || C || D {
print("pass")
} else {
print("nonPass")
}
// Prints "pass"
논리 연산자의 적용 우선 순위를 연산자에 맡기지 않고 명시적으로 괄호를 사용해 계산 순서를 지정할 수 있음.
let A = true
let B = true
let C = false
let D = false
if A && B || (C || D) {
print("pass")
} else {
print("nonPass")
}
// Prints "pass"
// A && B -> true
// C || D -> false
// (A && B) || (C || D) -> (true) || (false) -> true