Swift book의 basic operators를 보고 정리해보았습니다.
번역은 제멋대로라서 양해 부탁드립니다.

An operator is a special symbol or phrase that you use to check, change, or combine values.
값을 요리조리 다루고 싶을 때 사용하는 기호 or 구문이라 말하고 있다.
전문용어로는 연산자 라고 한다.
연산자는 크게 unary(1항), binary(2항), ternary(3항)로 나뉘어 지며 피연산자(operand)의 갯수로 구분한다.
값을 초기화 시키거나 업데이트 하기 위해 사용이 됩니다.
아마도 연산자들 중에서 제일 많이 사용하지 않을까요??
만약 = 연산자 오른쪽 값이 여러 값을 가진 튜플일 경우 여러개의 변수에 할당을 할 수 있습니다.
x 상수에 1이 들어가고 y 상수에 2가 들어갑니다.
다만 스위프트에서는 C와 다르게 할당 연산자가 따로 반환값이 나오지 않습니다.
그래서 다음과 같은 구문은 유효하지 않습니다.
스위프트에서는 4개의 산술 연산자를 지원합니다.
사용방법은 다른 언어들과 똑같습니다.
다만 C, Objective-C와 다르게 스위프트에서는 값이 overflow되는 것을 허용하지 않습니다.
(찾아보니 C같은 경우 overflow가 되면 최솟값으로 돌아오네요)
만약 overflow를 이용하고 싶으면 Overflow Operators를 채택하면 된다고 합니다.
또한 더하기 연산자(+)는 String(문자열)에도 사용이 가능합니다.

나머지를 구해주는 연산자며 % 를 사용합니다.
보통 다른 언어들은 modulo operator 라고 부릅니다.
만약 9 % 4 를 한다고 하면

a = (b x some multiplier) + remainder
이렇게 9에 4를 가능한 채워놓고 남는 숫자를 뱉어내게 됩니다.
음수에도 똑같이 사용이 가능합니다.
-9 = (4 x -2) + -1
값 앞에 - 를 붙여 양수 → 음수, 음수 → 양수 로 변환이 가능합니다.

값 앞에 + 를 붙여 사용이 가능한데 값이 변하지 않아 쓸모는 없어 보입니다.

= 연산자 앞에 산술 연산자를 붙여 새로운 연산자를 만들 수 있습니다.
예를 들어 자기 자신에 더하기 2를 한 값을 대입하고 싶을 때
a = a + 2 로 표현하면 되지만
a += 2 로도 간단하게 표현이 가능합니다.
이렇게 더하기 말고도 빼기, 곱셈, 나눗셈, 나머지도 다 표현이 가능합니다.
보통 +=1 을 표현할 때 ++ 로도 표현을 하는데 스위프트에서는 ++를 지원하지 않는 것으로 보입니다.
그러므로 ++를 표현하려고 하면 +=1 을 사용해야 합니다.
위에 할당 연산자와 마찬가지로 이것도 따로 반환값이 나오지 않습니다.
그러므로 b = a += 2 와 같은 구문은 유효하지 않습니다.
스위프트에서는 다음과 같은 비교 연산자를 지원합니다.
이러한 비교 연산자들은 Bool 값(true or false)을 반환하며 if, while 등 조건문과 반복문에 활용이 됩니다.
String(문자열) 또한 비교가 가능합니다.
문자열의 경우에는 left-to-right로 비교되며 제일 왼쪽 값이 같으면 그 다음 값, 또 같으면 그 다음 값으로 진행된다. 비교는 아스키 코드 값으로 비교합니다.
a 와 b 가 같으므로 제일 오른쪽에 있는 d 와 c 가 비교되며 d의 아스키 코드 값이 더 크기 때문에 결과적으로 왼쪽 값이 더 큽니다. 그러므로 다음 항은 true가 반환됩니다.
튜플도 비교가 가능하며, 이 경우에도 문자열과 같이 왼쪽 항 부터 비교합니다.

3개의 피연산자를 필요로 하는 조건 연산자 입니다.
question ? answer1 : answer 2 형식으로 사용됩니다.
의미는 question의 반환값(Bool이 반환 되어야 함)에 따라 true 일 경우 answer1, false일 경우 answer2가 실행됩니다.
hasHeader의 값이 true 이므로 괄호 안의 값은 50이 되며 rowHeight는 40 + 50 = 90이 됩니다.
위 if 문 코드를 3항 연산자를 이용해 짧게 표현이 가능합니다.
a ?? b
옵셔널 값을 unwrap하는 데에 사용이 되며 a가 nil일 경우에는 b 값이 반환되며 nil이 아닐 경우 a가 반환됩니다.
아래와 같은 구문을 줄였다고 보면 됩니다.

userDefinedColorName의 값이 초기화 되지 않아 nil을 가지므로 colorNameToUse에는 defaultColorName이 들어갑니다.
만약 userDefinedColorName에 값이 할당된 경우에는 nil이 아니므로 colorNameToUse에 userDefinedColorName이 들어가게 됩니다.
여기서 참고할 점은 앞에 값이 nil 이 아닐 경우 뒤에 있는 값은 평가를 진행하지 않는데 이것을 short-circuit evaluation 이라고 합니다.
short-circuit evaluation 참고
스위프트에서는 값의 범위를 표현하기 위해 여러개의 range operator를 제공합니다.
a…b 로 표현되며 a 에서 b 까지, a와 b를 포함한 범위입니다. 여기서 a 는 b보다 크면 안됩니다.
위와 같이 1…5 로 표현할 때 1에서 +1씩 5 까지 범위가 설정됩니다.
a..<b 로 표현되며 a 에서 b 까지, a는 포함하며 b 는 포함하지 않는 범위입니다.
Half-open range는 보통 배열의 인덱스에 접근할 때 많이 사용됩니다. (배열은 인덱스가 0 부터 시작하기 때문)

위에 2개와 다르게 한 쪽만 끝이 있으며 이것 또한 배열에서 사용됩니다.
예를 보며 이해를 해봅시다.
위 for문에 경우에는 2… 로 범위를 나타냈습니다.
해석하면 2 에서 names의 배열 크기 끝 까지를 범위로 하겠다는 말 입니다.
그래서 names[2], names[3]이 출력이 되었습니다.
아래 for문은 …2 로 범위를 나타냈습니다.
이는 names배열 처음(0) 부터 2까지를 범위로 하겠다는 얘기 입니다.
그래서 names[0], names[1], names[2]가 출력이 되었습니다.
이렇게 Half-open range 로도 표현이 가능합니다.
논리 연산자는 true, false를 결합시키는 연산자로 스위프트에서는 3개의 연산자를 제공합니다.
(!a) 이 연산자는 Bool 값을 반전시킵니다. 즉, true → false, false → true 로 바뀝니다.
위 조건문에서는 !allowedEntry가 true(참)일 경우 실행이 되는데, 앞에 NOT Operator 가 있으므로 결과적으로는 allowedEntry가 false일 경우에 조건문이 실행이 됩니다.
a && b
두 피연산자가 둘 다 true일 경우에만 true를 반환하고, 둘 중에 하나라도 false가 있거나 둘 다 false일 경우에는 false가 반환됩니다.
enteredDoorCode는 true 지만 passedRetinaScan이 false라서 else문이 실행이 됩니다.
a || b
두 피연산자중 하나 이상이 true 일 경우 true를 반환합니다.
hasDoorKey는 false 이지만 knowsOverridePassword 가 true 이므로 조건문이 통과되고 “Welcome!”이 출력될 것입니다.
위와 같이 OR 연산자와 AND 연산자를 섞어 사용이 가능하며 왼쪽부터 차례대로 조건을 보게 됩니다.
(enterdDoorCode AND passedRetinaScan) → OR hasDoorKey → OR knowsOverridePassword 로 논리 연산이 진행된다.
위의 예제는 enteredDoorCode && passedRetinaScan 과 hasDoorKey 는 false가 나오지만 마지막 knowsOverridePassword가 true 이므로 OR 연산자로 묶여 있어 결과적으로 true로 반환이 됩니다.
괄호를 넣어 가독성을 향상시킬수 있습니다.
위 사진은 아까전에 본 예제와 똑같이 작동하지만 괄호를 넣어 어떤 논리 연산자가 어떻게 작용하는지 명확하게 알려주기 때문에 더욱 보기 좋은 코드가 됩니다.