
23.04.28
드디어 공부하는 기본 연산자
연산자는 값을 확인하거나, 바꾸거나, 합치기 위해 사용하는 특별한 기호이다. 기존에 C에서 사용하던 연산자들을 지원하나, 일반적인 에러들을 제거하기 위해 몇가지를 개선했다. a..< b 또는 a...b 와 같이 기존에 없던 범위를 표현하는 연산자들도 제공한다.
연산자는 단항이거나, 이항이거나, 삼항이다.
(a = b) 에서 할당 연산자 '=' 는 a의 값을 초기화하거나 b로 바꿔준다.
let b = 10
var a = 5
a = b
// a is now equal to 10
할당 연산자의 오른쪽에 오는 자료형이 값을 여러개 가지고 있는 튜플이면, 한번에 여러 상수와 변수로 분해될 수 있다.
let (x, y) = (1, 2)
// x = 1 , y = 2
C나 objective-C와 다르게, 할당연산자 '='는 값을 반환하지 않는다. 따라서 다음과 같은 코드는 유효하지 않다.
if x = y {
// x=y가 어떤 값을 반환하지 않기 때문에 이 식은 유효하지 않다.
}
'=='의 사용을 의도했는데 '='로 쓰는 실수가 간혹 있다. Swift는 이런 실수를 막기 위해 if x = y 를 아예 유효하지 않은 식으로 처리한다.
Swift는 모든 숫자 유형에 대해 4가지 산수 연산자를 제공한다.
1 + 2 //equals 3
5 - 3 //equals 2
2 * 3 //equals 6
10.0 / 2.5 //equals 4.0
덧셈 연산자는 String 자료형에도 사용할 수 있다.
"hello, " + "world" //equals "hello, world"
다른 언어에서는 modulo 연산자라고도 하는 Remainer 연산자 (a % b)는 a를 b로 나눈 값의 나머지를 나타낸다.
9 % 4 //equals 1
-9 % 4 //equals -1
접두사로 '-'를 사용해 값의 부호를 전환할 수 있다. 띄어쓰기를 사용하지 않고 값 앞에 바로 붙여야 한다.
let three = 3
let minusThree = -three // minusThree equals -3
let plusThree = -minusThree // plusThree equals 3, or "minus minus three"
'+'는 값에 아무런 변화를 주지 않고 값 그대로를 돌려준다.
let minusSix = -6
let alsoMinusSix = +minusSix // alsoMinusSix equals -6
C와 같이 Swift에서도 할당연산자 (=)를 다른 연산자와 복합해서 사용할 수 있다. 한가지 예는 추가 할당 연산자 (+=).
var a = 1
a += 2
// a is now equal 3
비교연산자는 주로 if문과 같은 조건문에서 사용된다.
let name = "world"
if name == "world" {
print("hello, world")
} else {
print("I'm sorry \(name), but I don't recognize you.")
}
// Prints "hello, world", because name is indeed equal to "world".
같은 숫자와 자료형의 값을 가진 두 가지의 튜플을 비교할 수도 있다. 비교 결과가 다른 값을 찾을 때까지 왼쪽에서 오른쪽으로, 한 번에 하나씩 비교된다. 튜플의 모든 요소들을 비교한 결과가 같아야 두 개의 튜플이 같다고 간주된다.
(1, "zebra") < (2, "apple") // 1은 2보다 작고, zebra와 apple은 비교할 필요가 없으므로 true이다.
(3, "apple") < (3, "bird") // 3은 3과 같고, apple이 bird보다 작으므로 true이다.
(4, "dog") == (4, "dog") // 4는 4와 같고, dog는 dog과 같으니 true 이다.
첫 번째 비교식에서, 1은 2보다 작으므로 왼쪽 튜플이 오른쪽보다 작다. 이미 1과 2에서 비교가 된 이후이므로 zebra와 apple 중 누가 큰지는 상관이 없다.
두 번째와 세 번째 비교식에서, 첫 번째 비교값이 각각 같으므로 두 번째 비교값들이 비교된다.
String과 Int같이 비교가 가능한 것들은 tuple 안에서 비교가 가능하지만, Bool과 같이 비교가 되지 않는 자료형은 tuple 안에서 비교될 수 없다.
("blue", -1) < ("purple", 1) // true
("blue", false) < ("purple", true) // Error
Swift 라이브러리에서 제공하는 비교연산자로는 7개 미만의 값을 가진 tuple끼리 비교 가능하다. 그 이상의 개수의 값을 비교하려면 스스로 비교연산자를 만들어서 써야 함.
🌏 참고사이트
Swift Language Guide