개발하는 뚝딱이

[swift] 연산자 본문

swift

[swift] 연산자

개발자뚝딱이 2020. 4. 6. 00:22

책 <스위프트 프로그래밍 3판 ;야곰 지음> 을 정리한 글입니다.

 

 


 

 

일반적인 연산자는 다른 언어와 비슷하다. 단순한 연산자 외에 조금 생소한 연산자를 정리해본다.

 

1. 부동소수점 타입의 나머지 연산

- .truncatingRemainder(dividingBy:)

let num: Double = 5.0
let result: Double = number.truncatingRemainder(dividingBy: 1.5) // 0.5

 

2. 비교 연산자

- 참조 타입인 클래스의 인스턴스에서만 비교 연산자 사용 가능

- ===

let referenceA: SomeClass = SomeClass()
let referenceB: SomeClass = SomeClass()
let referenceC: SomeClass = referenceA
let isSameReferenceAB: Bool = referenceA === referenceB // false
let isSameReferenceAC: Bool = referenceA === referenceC // true

let valueA: Int = 3
let valueB: Int = 5
let isSameValueAB: Bool = valueA == value B // false

 

3. 범위연산자

- A...B : A이상 B이하

- A..<B : A이상 B미만

- A... : A이상

- ...A : A이하

- ..<A : A미만

 

4. 비트 연산자

- ~A : A의 비트를 반전한 결과

- A&B : A와 B의 AND 논리 연산

- A|B : A와 B의 OR 논리 연산

- A^B : A와 B의 XOR 논리 연산

- A>>B : A의 비트를 B만큼 shift한 결과

- A<<B : A의 비트를 B만큼 shift한 결과

print(4<<1) // 4(0100), result = 8(1000)

var A = 4
let B = 1
A <<= B // A = 8

 

5. 오버플로우 연산자

- &+

- &-

- &*

var num: UInt8 = 0
let underflowedValue: UInt8 = num &- 1 // 255
let overflowedValue: UInt8 = underflowedValue &+ 1 // 0

 

6. 기타 연산자

A ?? B // A가 nil이 아니면 A반환, A가 nil이면 B반환
-A // 부호변경
O! // O(옵셔널 개체)값 강제 추출
V? // V(옵셔널 개체) 안전하게 추출, V가 옵셔널임을 표시

let num: Int = someOptionalInt != nil ? someOptionalInt! : 0
let num2: Int = someOptionalInt ?? 0 // 위 코드보다 더 안전하게 사용 가능

 

7. 사용자 정의 연산자

- 오버로드 가능

- 전위연산자, 후위연산자 같이 사용하면 후위연산자 먼저 수행

 

(1) 전위연산자

prefix operator **

prefix func ** (value: Int) -> Int {
  return value * value
}

let num: Int = -5
let sqrtNum: Int = **num // 25

(2) 후위연산자

postfix operator **

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

let num: Int = 5
let result: Int = num** // 15

(3) 중위연산자

- 우선순위 그룹 MultiplicationPrecedence를 명시하지 않으면, DefaultPrecedence 그룹을 우선순위로 갖게 됨

import Foundation

infix operator **: MultiplicationPrecedence

func ** (lhs: String, rhs: String) -> Bool {
    return lhs.contains(rhs)
}

let hello: String = "Hello everyone!"
let say: String = "Hello"
let result: Bool = hello ** say // true

'swift' 카테고리의 다른 글

[swift] 옵셔널  (0) 2020.04.28
[swift] 메소드 (method)  (0) 2020.04.27
[swift] 프로퍼티(property)  (0) 2020.04.15
[swift] 구조체(struct)와 클래스(class) 비교  (0) 2020.04.08
[swift] 데이터 타입  (0) 2020.04.02