Swift 연산자

낯선 언어를 매일 학습하며 몰입과 성장을 기록하는 일지

  ·  2 min read

오늘의 포커스 #

  • 공식 문서 섹션 또는 학습 주제
  • 구현/실험할 기능 또는 예제
  • 집중을 위해 설정한 제약 조건(시간, 도구 제한 등)

Ternary Conditional Operator (삼항 연산자) #

  • 형태: question ? answer1 : answer2
  • questiontrueanswer1, 아니면 answer2를 평가해 반환.
  • 간결하지만 과도한 중첩은 가독성을 해침.
let contentHeight = 40
let hasHeader = true
let rowHeight = contentHeight + (hasHeader ? 50 : 20) // 90

Nil-Coalescing Operator (nil 병합 연산자) #

  • 형태: a ?? b
  • a가 옵셔널일 때, 값이 있으면 언래핑한 값 반환, nil이면 기본값 b 반환.
  • a != nil ? a! : b의 간결한 형태이며, 단락 평가를 지원(앞이 non-nil이면 b 미평가).
let defaultColorName = "red"
var userDefinedColorName: String?   // 기본값 nil

var colorNameToUse = userDefinedColorName ?? defaultColorName // "red"
userDefinedColorName = "green"
colorNameToUse = userDefinedColorName ?? defaultColorName     // "green"

Range Operators (범위 연산자) #

Closed Range: a...b #

  • a부터 b까지 포함.
  • $[a,b]$
for index in 1...5 {
    print("\(index) times 5 is \(index * 5)")
}
// 1*5=5 ... 5*5=25

Half-Open Range: a..<b #

  • a부터 b 미만(마지막 값 제외). 배열 인덱싱에 유용.
  • $[a,b)$
let names = ["Anna", "Alex", "Brian", "Jack"]
for i in 0..<names.count {
    print("Person \(i + 1) is called \(names[i])")
}

One-Sided Ranges: a..., ...b, ..<b #

  • 한쪽 끝을 생략한 범위.
  • 컬렉션 서브스크립트나 포함 여부 검사 등에 사용.
let names = ["Anna", "Alex", "Brian", "Jack"]
for name in names[2...] { print(name) }   // Brian, Jack
// [2, end]
for name in names[...2] { print(name) }   // Anna, Alex, Brian
// [0, 2]
for name in names[..<2] { print(name) }   // Anna, Alex
// [0, 2)

let range = ...5
range.contains(7)   // false
range.contains(4)   // true
range.contains(-1)  // true