Jeonhui {ios}

[swift] (3) 연산자 본문

swift

[swift] (3) 연산자

jeonhui 2022. 3. 2. 14:07

안녕하세요. Jeonhui입니다.

이번 시간에는 swift의 연산자에 대해 알아보도록 하겠습니다.

 

이전 글

 

[swift] (2) 고급데이터타입

2022.02.23 - [swift] - [swift] (1) 변수와 상수, 데이터타입 안녕하세요. Jeonhui입니다. 이번 시간에는 swift의 고급 데이터 타입에 대해 알아보도록 하겠습니다. 기본 데이터 타입에 대한 설명은 이전 글

jeonhui.tistory.com


연산자

대입 연산자

A = B A에 B를 대입

 

산술 연산자

A + B A와 B를 더한 값 반환
A - B A와 B를 뺀 값 반환
A * B A와 B를 곱한 값 반환
A / B A와 B를 나눈 값 반환
A % B A와 B를 나눈 나머지 반환

 

비교 연산자 (true, false 반환)

A == B A는 B와 같다 
A >= B A는 B보다 크거나 같다
A <= B A는 B보다 작거나 같다
A > B A는 B보다 크다
A < B A는 B보다 작다
A != B A와 B는 다르다
A === B A와 B가 같은 인스턴스를 가르킨다 (클래스 인스턴스 경우에만)
A !== B A와 B가 다른 인스턴스를 가르킨다
A ~= B A와 B의 패턴이 매치된다

 

삼항 조건 연산자

Bool ? A : B if(Bool): A else B 와 같음
조건이 참이라면 A, 아니라면 B

 

범위 연산자

A..B A부터 B까지 (B 포함)
A..<B A부터 B 이전까지 (B 포함 X)
A... A 이상의 수 (A 포함)
...A A 이하의 수 (A 포함)
..<A A 미만의 수 (A 포함 X)

 

부울 연산자

!A not 연산
A && B and 연산
A || B or 연산

 

비트 연산자

~A A의 비트 반전
A & B A와 B의 and 논리 연산
A | B A와 B의 or 논리 연산
A ^ B A와 B의 xor 논리 연산
A >> B, A<<B A의 비트를 B만큼 이동

 

복합 할당 연산자

A += B A = A + B
A -= B A = A - B
A *= B A = A * B
A /= B A = A / B
A %= B A = A % B
A <<= b A = A  << b
A >>= b A = A >> b
A &= B A = A & B
A |= B A = A | B
A ^= B A = A ^ B

 

오버플로우 연산자 (오버플로우에 대비한 연산)

&+
&-
&*

 

기타 연산자

A ?? B A가 nil이 아니면 A 반환
nil이면 B 반환
-A 수의 부호 변경
O! 옵셔널 개체 강제 추출
V? 옵셔널 값 안전하게 추출하거나, 데이터타입이 옵셔널임을 표현

 

사용자 정의 연산자

(/, =, -, +, !, *, %, <, >, &, |, ^, ?, ~)를 결합해서 사용

토큰 (=, ->, //, /*, */, . ) 전위 연산자 (<, &, ?) 중위 연산자 (?) 후위 연산자 (>, !, ?) 등은 재정의할 수 없음

 

전위 연산자 사용자 정의 

prefix operator **
prefix func ** (value:Int)->Int{
	return value*value
}
let a:Int = 7
let b:Int = a**
print(b) // 49

후위 연산자 사용자 정의

postfix operator **
postfix func ** (value:Int)->Int{
	return value+value
}

let a:Int = 1
let b:Int = **a
print(b) // 2

중위 연산자 사용자 정의

중위 연산자는 우선순위 그룹을 명시해줄 수 있습니다.

우선순위 그룹은 precedencegroup 뒤에 그룹 이름을 써주어 정의합니다.

precedencegroup: 우선순위 그룹 이름 {
	higherThan: 더 낮은 우선순위 그룹 이름
    higherThan: 더 높은 우선순위 그룹 이름
    associativity: 결합방향(left/right/none)
    assignment: 할당방향 사용(true/false) //옵셔널 체이닝 관련 개념
}
infix operater **: 우선 순위 그룹 // 지정 안할 시에 DefaultPrecedence그룹으로 자동 지정

func ** (left: String, right: String) -> Bool {
	return left.contains(right)
}

이번 시간에는 연산자에 대해 정리해보았습니다.  잘못된 부분이 있을 경우 댓글을 남겨주세요. :)

읽어주셔서 감사합니다.

'swift' 카테고리의 다른 글

[swift] (2) 고급데이터타입  (0) 2022.02.24
[swift] (1) 변수와 상수, 데이터타입  (0) 2022.02.23