Introduction
: 스위프트는 대부분의 standard C operators를 지원한다. 게다가 빈번히 일어나는 실수를 줄이기 위한 동작들도 추가되었다. 예를들어, '=' operator는 값을 return 하지 않는다.(우리는 종종 if문 안에서 '==' 대신 '='를 입력한다. C에서는 '='는 값을 return하기 때문에 compile time에 해당오류를 잡기 힘들고, 심지어는 runtime 에서조차 잡기 힘들다.)
또한 '+', '-', '*', '/', '%'는 overflow를 허용하지 않는다. 그리고 'a..<b', 'a...b' 같은 다양한 operator를 제공하면서 프로그래머에게 편의를 제공한다.
Assignment Operator
let b = 10
let a = 5
a = b
let (x, y) = (1, 2)
Arithmetic Operators
: Addition (+), Substraction(-), Multiplication(*), Division(/)
: 여느 언어와 다르게 overflow를 허용하지 않는다.
: Addition operator는 String concatenation을 지원한다.
"hello, " + "world"
// "hello, world"
Remainder Operator
: C와 동일
9 % 4
// equals 1
-9 % 4
// equals -1
Unary Minus Opeartor
: C와 동일
let three = 3
let minusThree = -three
let plusThree = -minusThree
Unary Plus Operator
: C와 동일
let minusSix = -6
let alsoMinusSix = +minusSix
// equals -6
Compound Assignment Operators
: C와 동일
var a = 1
a += 2
// a = 3
Comparison Operators
: C와동일 ( '==', '!=', '>', '<', '>='. '<=' )
: '===', '!==' reference type 비교, 두 object가 같은 instance를 참조하고 있는지 체크한다.
: tuple 또한 비교가 가능하다. 단 tuple의 value들의 갯수가 같아야 하며, 각 value들이 비교가 가능한 type이어야 한다. 예를 들어 tuple의 value가 (Int, String)이면, 두 type 모두 비교가 가능한 type이기 때문에 비교 연산자를 사용할 수 있지만 value중 Bool이 있으면 비교가 불가능하다.
: 왼쪽에서부터 오른쪽으로 비교한다. 밑에 예제를 보고 어떻게 동작 하는지 알아보자.
(1, "zebra") < (2, "apple")
// true because 1 is less than 2; "zebra" and "apple" are not 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"
(3, "zebra") > (4, "dog")
// false because 3 is less than 4, "zebra" and "dog" are not compared
* 스위프트에서 기본으로 제공하는 tuple에 대한 comparison operator는 tuple의 value들의 갯수를 6개까지로 한정한다. 7개 이상의 value들을 가지는 tuple을 비교하려면 스스로 operator를 만들어야 한다.
Ternary Conditional Operator
: 삼항 연산자, C와 동일
: question ? answer1 : answer2
let contentHeight = 40
let hasHeader = true
let rowHeight = contentHeight + (hasHeader ? 50 : 20)
// rowHeight is equal to 90
Nil-Coalescing Operator
:(a ?? b), a는 optional type이다. a가 value를 가지고 있으면 a를 unwrap하고 a가 nil이면 b를 return한다.
: a와 b는 같은 type 이어야 한다.
let defaultColorName = "red"
var userDefinedColorName: String?
var colorNameToUse = userDefinedColorName ?? defaultColorName
// colorNameToUse = "red"
Range Operators
: 스위프트는 2개의 range Operators를 제공한다.
Closed Range Operator
: 'a...b' 는 a와 b를 포함하는 범위를 뜻한다. a는 b보다 크지 않아야 한다.
for index in 1...5 {
print("\(index) times 5 is \(index * 5)")
}
Half-Open Range Operator
: 'a..<b' a는 포함하되, b는 포함하지 않는 범위를 뜻한다. a는 b보다 크지 않아야 한다.
이 operator는 array같은 zero-based 리스트를 다룰때 유용하다.
let names = ["Anna", "Alex", "Brian", "Jack"]
let count = names.count
for i in 0..<count {
print("Person \(i + 1) is called" \(names[i])")
}
Logical Operators
: 세개의 Logical Operators를 제공한다. C와 동일.
: Logical NOT (!a)
: Logical AND (a && b)
: Logical OR (a || b)
'IOS > Swift' 카테고리의 다른 글
[Swift 4.0] Functions (0) | 2017.04.01 |
---|---|
[Swift 4.0] Control Flow (0) | 2017.04.01 |
[Swift 4.0] Collection Types (0) | 2017.02.03 |
[Swift 4.0] Strings and Characters (0) | 2017.01.22 |
[Swift 4.0] The Basics (0) | 2017.01.13 |