-
Basic OperatorsiOS/Swift 공식문서 2022. 2. 12. 12:15
Terminology
연산자는 피연산자의 개수에 따라 Unary(1개), Binary(2개), Ternary(3개) operator로 나뉜다.
Assignment Operator
하나의 상수/변수 뿐만 아니라 튜플도 여러 상수/변수로 decomposing이 가능하다.
let a = 5 let (x, y) = (1, 2)
C와는 달리 Swift에서의 할당 연산자는 값을 반환하지 않는다. 따라서 조건문 등에서 사용할 수도 없다. 이는 개발자가 실수로
==
대신=
를 사용하는 것을 방지하기 위해서이다.if x = y { // error // This isn't valid, because x = y doesn't return a value. }
Arithmetic Operators
모든 숫자 타입에 대하여 4개의 산술 연산자를 사용할 수 있다.
1 + 2 // equals 3 5 - 3 // equals 2 2 * 3 // equals 6 10.0 / 2.5 // equals 4.0
Swift는 C와는 달리 overflow를 허용하지 않는다.
var a: Int8 = 127 a = a + 1 // terminated
+
는 String 결합에 사용할 수 있다."hello, " + "world" // equals "hello, world"
Remainder Operator
(양수) % (양수)의 경우는 우리가 알고 있는 나머지를 반환한다.
9 % 4 // equals 1
(음수) % (양수)의 경우는 (양수) % (양수)에서의 결과와 부호가 반대가 된다.
(-9) % 4 // equals -1
나누는 수가 음수인 경우는 나누는 수가 양수인 경우와 같은 결과를 출력한다.
print(9 % (-4)) // 1 print((-9) % (-4)) // -1
Unary Minus Operator
특정 값의 부호를 반대로 할 때 사용한다. 중간에 띄어쓰기를 해서는 안된다.
let three = 3 let minusThree = -three // -3
Unary Plus Operator
기존 값을 그대로 반환한다.
let minusSix = -6 let alsoMinusSix = +minusSix // -6
Compound Assignment Operators
C 처럼
+=
,-=
등의 연산자를 사용할 수 있다. 계산하고 값을 할당하는 연산을 한 번에 수행한다.var a = 1 a += 2 // now equal to 3
Comparison Operators
두 개의 튜플이 element의 개수와 타입이 같을 경우 비교하는 것이 가능하다. 두 개의 수를 비교할 때 큰 자리의 숫자부터 비교하는 것처럼, 튜플도 가장 왼쪽의 element부터 비교하여 결과를 반환한다. 각 element를 비교하면서 서로 다른 값이 나오면, 그 이후 element들은 비교하지 않는다.
(1, "zebra") < (2, "apple") // true because 1 is less than 2; "zebra" and "apple" aren't compared (3, "apple") < (3, "bird") // true because 3 is equal to 3, and "apple" is less than "bird" (4, "dog") == (4, "dog") // true because 4 is equal to 4, and "dog" is equal to "dog"
Bool
같이 비교가 불가능한 타입을 비교하는 경우 에러가 발생한다.("blue", -1) < ("purple", 1) // OK, evaluates to true ("blue", false) < ("purple", true) // Error because < can't compare Boolean values
Ternary Conditional Operator
다른 언어와 사용법이 같으므로 생략(조건으로는
Bool
값만 사용 가능)Nil-Coalesing Operator
??
을 사용하는 Binary Operator이다.a ?? b
는a != nil ? a! : b
의 shorthand이다. a가 nil이라면 b의 값은 평가되지 않는다.let defaultColorName = "red" var userDefinedColorName: String? // defaults to nil var colorNameToUse = userDefinedColorName ?? defaultColorName // red userDefinedColorName = "green" colorNameToUse = userDefinedColorName ?? defaultColorName // green
Range Operators
Closed Range Operator
양쪽 경곗값을 포함하는 연산자로,
a..b
로 작성한다. 그리고 a는 b보다 작거나 같아야 한다. for문에서 주로 사용한다.for index in 1...5 { print("\(index) times 5 is \(index * 5)") } // 1 times 5 is 5 // 2 times 5 is 10 // 3 times 5 is 15 // 4 times 5 is 20 // 5 times 5 is 25
Half Open Range Operator
오른쪽 경곗값을 포함하지 않는 범위 연산자로,
a..<b
로 작성한다. Array와 같은 zero-based list를 사용할 때 유용하다.let names = ["Anna", "Alex", "Brian", "Jack"] let count = names.count for i in 0..<count { print("Person \(i + 1) is called \(names[i])") } // Person 1 is called Anna // Person 2 is called Alex // Person 3 is called Brian // Person 4 is called Jack
One-Sided Ranges
a...
혹은...a
와 같이 범위를 한 쪽만 제한하는 것도 가능하다. 또한..<a
와 같이 경곗값을 포함하지 않는 경우도 가능하다. 주로 배열에서 사용한다.for name in names[2...] { print(name) } // Brian // Jack for name in names[...2] { print(name) } // Anna // Alex // Brian for name in names[..<2] { print(name) } // Anna // Alex for element in names[1<..] { // error print(element) }
Logical Operators
다음과 같이 논리 연산자를 여러 개 사용하면 왼쪽에서부터 차례대로 계산하여 결과를 반환한다. 계산 순서를 바꾸고자 하면 괄호를 따로 사용하면 된다.
if enteredDoorCode && passedRetinaScan || hasDoorKey || knowsOverridePassword { // ((enteredDoorCode && passedRetinaScan) || hasDoorKey) || knowsOverridePassword와 결과 같음 print("Welcome!") } else { print("ACCESS DENIED") } // Prints "Welcome!"
Reference
https://docs.swift.org/swift-book/LanguageGuide/BasicOperators.html
'iOS > Swift 공식문서' 카테고리의 다른 글
Functions (0) 2022.02.15 Control Flow (0) 2022.02.15 Collection Types (0) 2022.02.14 Strings & Characters (0) 2022.02.14 The Basics (0) 2022.02.11