ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Basic Operators
    iOS/Swift 공식문서 2022. 2. 12. 12:15

    Terminology

    연산자는 피연산자의 개수에 따라 Unary(1개), Binary(2개), Ternary(3개) operator로 나뉜다.

     

    Assignment Operator

    하나의 상수/변수 뿐만 아니라 튜플도 여러 상수/변수로 decomposing이 가능하다.

    let a = 5
    let (x, y) = (1, 2)

     

    C와는 달리 Swift에서의 할당 연산자는 값을 반환하지 않는다. 따라서 조건문 등에서 사용할 수도 없다. 이는 개발자가 실수로 ==대신 =를 사용하는 것을 방지하기 위해서이다.

    if x = y { // error
        // This isn't valid, because x = y doesn't return a value.
    }

     

    Arithmetic Operators

    모든 숫자 타입에 대하여 4개의 산술 연산자를 사용할 수 있다.

    1 + 2       // equals 3
    5 - 3       // equals 2
    2 * 3       // equals 6
    10.0 / 2.5  // equals 4.0

     

    Swift는 C와는 달리 overflow를 허용하지 않는다.

    var a: Int8 = 127
    a = a + 1 // terminated

     

    +는 String 결합에 사용할 수 있다.

    "hello, " + "world"  // equals "hello, world"

     

    Remainder Operator

    (양수) % (양수)의 경우는 우리가 알고 있는 나머지를 반환한다.

    9 % 4    // equals 1

     

    (음수) % (양수)의 경우는 (양수) % (양수)에서의 결과와 부호가 반대가 된다.

    (-9) % 4    // equals -1

    나누는 수가 음수인 경우는 나누는 수가 양수인 경우와 같은 결과를 출력한다.

    print(9 % (-4)) // 1
    print((-9) % (-4)) // -1

     

    Unary Minus Operator

    특정 값의 부호를 반대로 할 때 사용한다. 중간에 띄어쓰기를 해서는 안된다.

    let three = 3
    let minusThree = -three // -3

     

    Unary Plus Operator

    기존 값을 그대로 반환한다.

    let minusSix = -6
    let alsoMinusSix = +minusSix // -6

     

    Compound Assignment Operators

    C 처럼 +=, -= 등의 연산자를 사용할 수 있다. 계산하고 값을 할당하는 연산을 한 번에 수행한다.

    var a = 1
    a += 2 // now equal to 3

     

    Comparison Operators

    두 개의 튜플이 element의 개수와 타입이 같을 경우 비교하는 것이 가능하다. 두 개의 수를 비교할 때 큰 자리의 숫자부터 비교하는 것처럼, 튜플도 가장 왼쪽의 element부터 비교하여 결과를 반환한다. 각 element를 비교하면서 서로 다른 값이 나오면, 그 이후 element들은 비교하지 않는다.

    (1, "zebra") < (2, "apple")   // true because 1 is less than 2; "zebra" and "apple" aren't compared
    (3, "apple") < (3, "bird")    // true because 3 is equal to 3, and "apple" is less than "bird"
    (4, "dog") == (4, "dog")      // true because 4 is equal to 4, and "dog" is equal to "dog"

     

    Bool같이 비교가 불가능한 타입을 비교하는 경우 에러가 발생한다.

    ("blue", -1) < ("purple", 1)        // OK, evaluates to true
    ("blue", false) < ("purple", true)  // Error because < can't compare Boolean values

     

    Ternary Conditional Operator

    다른 언어와 사용법이 같으므로 생략(조건으로는 Bool값만 사용 가능)

     

    Nil-Coalesing Operator

    ??을 사용하는 Binary Operator이다. a ?? ba != nil ? a! : b의 shorthand이다. a가 nil이라면 b의 값은 평가되지 않는다.

    let defaultColorName = "red"
    var userDefinedColorName: String?   // defaults to nil
    
    var colorNameToUse = userDefinedColorName ?? defaultColorName // red
    
    userDefinedColorName = "green"
    colorNameToUse = userDefinedColorName ?? defaultColorName // green

     

    Range Operators

    Closed Range Operator

    양쪽 경곗값을 포함하는 연산자로, a..b로 작성한다. 그리고 a는 b보다 작거나 같아야 한다. for문에서 주로 사용한다.

    for index in 1...5 {
        print("\(index) times 5 is \(index * 5)")
    }
    // 1 times 5 is 5
    // 2 times 5 is 10
    // 3 times 5 is 15
    // 4 times 5 is 20
    // 5 times 5 is 25

     

    Half Open Range Operator

    오른쪽 경곗값을 포함하지 않는 범위 연산자로, a..<b로 작성한다. Array와 같은 zero-based list를 사용할 때 유용하다.

    let names = ["Anna", "Alex", "Brian", "Jack"]
    let count = names.count
    for i in 0..<count {
        print("Person \(i + 1) is called \(names[i])")
    }
    // Person 1 is called Anna
    // Person 2 is called Alex
    // Person 3 is called Brian
    // Person 4 is called Jack

     

    One-Sided Ranges

    a... 혹은 ...a와 같이 범위를 한 쪽만 제한하는 것도 가능하다. 또한 ..<a와 같이 경곗값을 포함하지 않는 경우도 가능하다. 주로 배열에서 사용한다.

    for name in names[2...] {
        print(name)
    }
    // Brian
    // Jack
    
    for name in names[...2] {
        print(name)
    }
    // Anna
    // Alex
    // Brian
    
    for name in names[..<2] {
        print(name)
    }
    // Anna
    // Alex
    
    for element in names[1<..] { // error
        print(element)
    }

     

    Logical Operators

    다음과 같이 논리 연산자를 여러 개 사용하면 왼쪽에서부터 차례대로 계산하여 결과를 반환한다. 계산 순서를 바꾸고자 하면 괄호를 따로 사용하면 된다.

    if enteredDoorCode && passedRetinaScan || hasDoorKey || knowsOverridePassword {
        // ((enteredDoorCode && passedRetinaScan) || hasDoorKey) || knowsOverridePassword와 결과 같음
        print("Welcome!")
    } else {
        print("ACCESS DENIED")
    }
    // Prints "Welcome!"

     

    Reference

    https://docs.swift.org/swift-book/LanguageGuide/BasicOperators.html

    'iOS > Swift 공식문서' 카테고리의 다른 글

    Functions  (0) 2022.02.15
    Control Flow  (0) 2022.02.15
    Collection Types  (0) 2022.02.14
    Strings & Characters  (0) 2022.02.14
    The Basics  (0) 2022.02.11

    댓글

Designed by Tistory.