+
)는 let i = 1 + 2
에서처럼 두 숫자를 더하고 논리 AND 연산자 (&&
)는 if enteredDoorCode && passedRetinaScan
에서처럼 두 부울 값을 결합합니다.=
)는 등호 연산자 (==
)를 의도했을 때 실수로 사용되지 않도록 값을 반환하지 않습니다. 산술 연산자 (+
, -
, *
, /
, %
등)는 타입이 수용할 수 있는 값의 범위보다 크거나 작은 숫자로 작업을 수행하려 할 때 예기치 않은 결과를 피하기 위해 값 오버플로우를 감지하고 허락하지 않습니다. 오버플로우 연산자 (Overflow Operators) 에서 설명한 대로 Swift 오버플로우 연산자를 사용하여 값 오버플로우 동작을 결정할 수 있습니다.a..<b
및 a...b
와 같은 범위 연산자를 제공합니다.-a
처럼 단일 항목에 동작합니다. 단항 접두사 연산자는 !b
처럼 항목 바로 직전에 위치하고 단항 접미사 연산자는 c!
처럼 항목 바로 다음에 위치합니다.2 + 3
처럼 2개의 항목에 동작하고 2개의 항목 사이에 위치해야 하므로 위치는 고정 입니다.a ? b : c
)입니다.1 + 2
표현식에서 +
기호는 중위 연산자이고 값 1
과 2
는 피연산자 입니다.a = b
) 는 b
의 값으로 초기화 되거나 업데이트 됩니다:==
)가 실제로 사용되어야 할 곳에 실수로 할당 연산자 (=
)가 사용되는 것을 방지합니다. if x = y
가 유효하지 않는 것처럼 Swift는 코드에서 이런 종류의 에러를 피할 수 있도록 도와줍니다.+
)-
)*
)/
)a &+ b
와 같은 Swift의 오버플로우 연산자를 사용하여 값 오버플로우 동작을 선택할 수 있습니다. 자세한 내용은 오버플로우 연산자 (Overflow Operators) 를 참고 바랍니다.String
연결도 지원합니다:a % b
)는 a
안에 들어갈 b
의 배수가 몇인지를 계산하고 남은 값 (나머지)을 반환합니다.NOTE 나머지 연산자 (%
)는 다른 언어에서는 모듈로 연산자 (modulo operator) 라고 합니다. 그러나 음수에 대한 Swift의 동작은 모듈로 연산이 아닌 나머지 입니다.
9 % 4
를 계산하기위해 9
안에 얼마나 많은 4
가 들어가는지 알아야 합니다:9
에 4
가 2번 들어가고 오렌지 색과 마찬가지로 1
이 남는 것을 알 수 있습니다.a % b
의 결과를 구하기 위해 %
연산자는 아래의 방정식을 계산하고 출력으로 remainder
를 반환합니다:a = (b x some multiplier) + remainder
some multiplier
는 a
에 들어갈 b
의 최대배수 입니다.9
와 4
를 넣고 계산하면:9 = (4 x 2) + 1
a
에 음수를 이용하여 나머지를 계산할 때도 같은 메서드로 적용합니다:-9
와 4
를 넣고 계산하면:-9 = (4 x -2) + -1
-1
의 나머지를 얻습니다.b
에 음수는 무시됩니다. 이것은 a % b
와 a % -b
는 항상 같은 결과를 얻는다는 의미입니다.-
접미사를 사용하여 변경할 수 있으며 이것을 단항 빼기 연산자 (unary minus operator) 라고 합니다.-
)는 공백없이 작동하는 값 바로 앞에 추가됩니다.+
)는 어떠한 변경없이 그 값을 그대로 반환합니다:=
)과 다른 연산자를 결합한 복합 대입 연산자 (compound assignment operators) 를 제공합니다. 아래 예제는 덧셈 대입 연산자 (+=
) 입니다:a += 2
는 a = a + 2
의 짧은 표현입니다. 효과적으로 덧셈과 대입은 동시에 수행되고 하나의 연산자로 결합됩니다.NOTE 복합 대입 연산자는 값을 반환하지 않습니다. 예를 들어let b = a += 2
로 작성할 수 없습니다.
a == b
)a != b
)a > b
)a < b
)a >= b
)a <= b
)NOTE Swift는 또한 2개의 객체 참조가 동일한 객체 인스턴스를 참조하는지 판별하는 2개의 식별 연산자 (identity operators) (===
와!==
)를 제공합니다. 자세한 내용은 식별 연산자 (Identity Operators) 를 참고 바랍니다.
true
인지 아닌지 판단하기 위해 Bool
값을 반환합니다:if
구문과 같은 조건 구문에서 사용되기도 합니다:1
이 2
보다 작기 때문에 (1, "zebra")
는 (2, "apple")
보다 작습니다. 튜플의 첫번째 요소에 의해 비교가 이미 마쳤기 때문에 "zebra"
가 "apple"
보다 더 작은지 여부는 아무런 상관이 없습니다. 그러나 튜플의 첫번째 요소가 같을 때는 두번째 요소가 비교됩니다. - 위 예제에서 두번째와 세번째 줄의 결과를 살펴보면 알 수 있습니다.String
과 Int
값은 <
연산자를 사용하여 비교가 가능하므로 타입 (String, Int)
의 2개의 튜플은 비교할 수 있습니다. 반대로 <
연산자는 Bool
값에 적용할 수 없기 때문에 타입 (String, Bool)
의 2개의 튜플은 <
연산자로 비교할 수 없습니다.NOTE Swift 표준 라이브러리는 7개 미만의 요소를 가지고 있는 튜플에 대해 튜플 비교 연산자를 제공합니다. 7개 이상의 요소의 튜플을 비교하려면 비교 연산자를 직접 구현해야 합니다.
question ? answer1 : answer2
형태의 3가지 부분으로 이루어진 특별한 연산자입니다. question
이 참 또는 거짓인지에 따라 2개의 표현식 중 하나를 나타내는 식입니다. question
이 참이라면 answer1
을 반환하고 반대면 answer2
를 반환합니다.rowHeight
를 한줄의 코드로 올바른 값으로 설정할 수 있으며 두번째 예에서 사용된 코드보다 간결합니다.a ?? b
)는 옵셔널 a
에 값이 있으면 a
를 풀거나 a
가 nil
이면 기본값 b
를 반환합니다. 표현식 a
는 항상 옵셔널 타입 입니다. 표현식 b
는 a
에 저장된 타입과 같아야 합니다.a
가 nil
이 아닐경우 a
안에 래핑된 값을 접근하기 위해 강제로 언래핑 (a!
) 하며 a
가 nil
일 경우 b
를 반환합니다. nil-결합 연산자는 조건 검사 및 언래핑을 간결하고 읽기 쉬운 형태로 캡슐화 합니다.NOTEa
의 값이nil
이 아닐경우b
는 절대 반환되지 않습니다. 이러한 경우를 연산 생략 (short-circuit evaluation) 이라 합니다.
userDefinedColorName
변수는 기본값이 nil
인 옵셔널 String
으로 정의됩니다. userDefinedColorName
은 옵셔널 타입이기 때문에 값을 선택하기 위해 nil-결합 연산자를 사용할 수 있습니다. 위의 예제에서 연산자는 colorNameToUse
라는 String
변수의 초기값을 결정하는데 사용됩니다. userDefinedColorName
이 nil
이기 때문에 표현식 userDefinedColorName ?? defaultColorName
은 defaultColorName
또는 "red"
의 값을 반환합니다.userDefinedColorName
에 nil
이 아닌 값을 대입하고 nil-결합 연산자로 체크를 다시 수행하면 기본값 대신에 userDefinedColorName
에 래핑된 값을 사용합니다:a...b
)는 값 a
와 b
가 포함된 a
부터 b
까지의 범위 실행을 정의합니다. a
의 값은 b
보다 클 수 없습니다.for
-in
루프와 같이 모든 값을 사용할 범위를 반복할 때 유용합니다:a..<b
)는 b
가 포함되지 않은 a
부터 b
까지의 범위 실행을 정의합니다. 이것은 마지막 값은 포함되지 않지만 처음 값은 포함되므로 반-열림 (half-open) 이라 합니다. 닫힌 범위 연산자와 같이 a
의 값은 b
보다 클 수 없습니다. a
의 값이 b
와 같다면 결과 범위는 비어있을 것입니다.0..<count
는 반-열림 범위이기 때문에 오직 3
(배열의 마지막 아이템의 인덱스) 까지 카운트 합니다. 배열에 대한 자세한 설명은 배열 (Arrays) 을 참고 바랍니다.2
에서 배열 끝까지 배열의 모든 요소를 포함하는 범위가 그 예입니다. 이러한 경우 범위 연산자의 한쪽을 생략할 수 있습니다. 이러한 범위의 종류는 연산자가 오직 한쪽의 값만 가지고 있으므로 단-방향 범위 (one-sided range) 라고 합니다. 예를 들어:true
와 false
로 수정하거나 결합합니다. Swift는 C-기반 언어에서 볼 수 있는 3개의 표준 논리 연산자를 제공합니다:!a
)a && b
)a || b
)!a
)는 부울 값을 true
를 false
로 false
를 true
와 같이 반대로 만듭니다.a
가 아니다" 라고 읽을 수 있습니다:if !allowedEntry
구문은 "엔트리가 허락되지 않는다면" 이라고 읽을 수 있습니다. 다음 라인은 "엔트리가 허락되지 않음" 이 참일 때, 이 말은 allowedEntry
가 false
일 경우에만 실행된다는 의미입니다.a && b
)는 두 값이 모두 true
여야 true
를 표현하는 논리적 표현식을 만듭니다.false
이면 결과는 false
입니다. 사실 첫번째 값이 false
이면 true
의 결과를 얻을 수 없기 때문에 두번째 값은 살펴보지 않습니다. 이러한 경우를 연산 생략 (short-circuit evaluation) 이라 합니다.Bool
값이 true
일 경우에만 접근을 허락합니다:a || b
)는 2개의 인접한 파이프 문자로 만들어진 삽입 연산자입니다. 이것을 사용하여 2개의 값 중 하나라도 true
이면 표현식이 true
가 되는 논리적 표현식을 만듭니다.true
이면 표현식의 결과는 바뀌지 않으므로 우변은 고려하지 않습니다.Bool
값 (hasDoorKey
)은 false
이지만 두번째 값 (knowsOverridePassword
)는 true
입니다. 하나의 값이 true
이기 때문에 표현식은 true
가 되고 접근이 허용됩니다:&&
와 ||
연산자를 사용하였습니다. 그러나 &&
와 ||
연산자는 오직 2개의 값에서만 동작하므로 이것은 3개의 작은 표현식이 함께 엮어있는 형태입니다. 이 예제는 아래와 같이 읽을 수 있습니다:enteredDoorCode
, passedRetinaScan
, 그리고 hasDoorKey
의 값을 기반으로 첫번째 2개의 표현식은 false
입니다. 그러나 긴급 비밀번호는 알고 있으므로 이 표현식의 결과는 true
입니다.NOTE Swift 논리적 연산자&&
와||
은 왼쪽 우선결합 (left-associative) 입니다. 그 의미는 여러개의 논리적 연산자로 이루어진 복합 표현식은 가장 왼쪽부터 판단한다는 뜻입니다.