야곰의 스위프트 프로그래밍 - 스위프트 기초

스위프트 기초

연산자

사용자 정의 연산자

토큰으로 사용되는 =, ->, //, /*, */ 등과 전위 연산자 <, &, ?, 중위 연산자 ?, 후위 연산자 >, !, ? 등은 Swift에서 예약한 상태이므로 재정의할 수 없으며 사용자 정의 연산자로 사용될 수 앖다.

전위 연산자 정의와 구현

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

후위 연산자 정의와 구현

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

중위 연산자 정의와 구현

중위 연산자는 우선순위 그룹precedenceGroup을 명시해줄 수 있음

precedenceGroup 우선순위_그룹_이름 {
higherThan: 더_낮은_우선순위_그룹_이름
lowerThan: 더_높은_우선순위_그룹_이름
associativity: 결합방향(left / right / none)
assignment: 할당방향_사용(true / false)
}

Swift에 정의된 우선순위 그룹이 있음.

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

아래 순서대로 낮은 우선순위를 가짐.

우선순위를 지정하지 않으면 DefaultPrecendence를 가지며, 이는 TernaryPrecenecne보다 높은 우선순위르 갖는다.

  • BitwiseShiftPrecedence
    • <<, >>와 같은 비트와이즈 쉬프트 연산자
  • MultiplicationPrecedence
    • *, /, %와 같은 곱셈 관련 연산자
  • AdditionPrecedence
    • +, -와 같은 덧셈 관련 연산자
  • RangeFormationPrecedence
    • ..<, ...와 같은 범위를 만드는 연산자
  • CastingPrecedence
    • is, as와 같은 캐스팅 연산자
  • NilCoalescingPrecedence
    • ?? 연산자
  • ComparisonPrecedence
    • <, >=, ==와 같은 비교 연산자
  • LogicalConjunctionPrecedence
    • &&, ||와 같은 논리 연산자
  • TernaryPrecedence
    • ?:와 같은 삼항 연산자
  • AssignmentPrecedence
    • =, *=와 같은 할당 연산자

함수

종료되지 않는 함수

비반환 함수(메소드)는 반환 타입을 Never로 명시해준다.

func crash() -> Never {
fatalError("CRASH!")
}
crash() // 프로세스 종료 후 오류 보고

옵셔널

  • 옵셔널은 열거형으로 구현되어 있음! 그러므로 switch문으로 somenone인 케이스에 접근할 수 있으나 일반적을 옵셔널 바인딩 등의 방법을 활용한다.
  • 함수의 매개 변수 타입이 옵셔널이면, 매개 변수 기본값이 nil이 아니어도 함수 호출 시 그 부분에 아무런 값을 주지 않아도 nil이 들어올 것임을 알아야 한다.