이번글은 6. 조건문과 반복문에서 언급한 enum에 대한 글이다.

직접 만드는 자료형중에 하나라고 소개하고싶다.

정수가 여러가지 수를 모아 둔 형태라 하면 이 enum 은 사용자가 원하는것들을 모아둘수있다.

6번글에서 switch 예제로 사용한 코드를 다시보면

    var a = "banana"

    switch a {

      case "banana" : print("banana")

      case "apple" : print("apple")

      case "melon" : print("melon")

      case "lemon" : print("lemon")

      case "peach" : print("peach")

      default: print("다른 종류이다.")

    }

출처: https://wiwi-pe.tistory.com/105?category=976417 [선생님 개발블로그가 하고싶어요.:티스토리]

라고 되어 있는데.

여기서 a는 String이라는 자료형을 가지게된다.

switch는 조건으로 들어온 a가 가질수 있는 모든 값에 대해 case를 지정해줘서 조건을 분기하는 기능을 하는데

default에서 이외의 String값을 처리해주고있는데 오타라던가가 발생하면 항상 default로 빠져버린다.

여기서 만약 a가 enum이였다면 훨씬더 깔끔한 모습으로 안정적이게 바꿀수있다.

a 값이 

banana apple melon lemon peach 중 하나라면 

enum Fruit {
    case banana
    case apple
    case melon
    case lemon
    case peach
}

var a = Fruit.banana
switch a {
    case .banana : print("banana")
    case .apple : print("apple")
    case .melon : print("melon")
    case .lemon : print("lemon")
    case .peach : print("peach")
}

위와 같은 형태로 a값에 대한 오류를 사전에 방지를 할 수 있게된다.

이 이외에도 조건문의 기준으로 사용하기위해 불형 변수를 하나 사용한다하면

var flag = false

if flag { print("참일때 실행해라" }

이 항목을 

enum Some {
    case run
    case stop
}
var flag = Some.run
if flag == .run { print("참일때 실행해라") }

이와 같이 변경해서 사용하면 가독성과 확장성이 좋아진다.

가독성이야 이름때문에 그렇다해도 확장성이 왜 좋아지냐면

만약 flag가 나중에 run또는 stop이 아닌 pause를 가지게 된다면 단순히 Some에서 case pause를 추가해주면 된다. 또다른 flag를 사용하여 연속으로 if문을 중첩하여 분기를 해주는것보다 훨씬 확장성이 좋다.

다시 위의 바나나에 관한 이야기로 돌아가자면 enum자체에도 하나의 특정한 값을 가지게 할수도 있고 함수를 가지게 할 수 도 있는게 스위프트의 장점인데 이에 대해 예제로 하나 퉁치며 이번 enum을 마치려고 한다.

enum Fruit : Int {
    case banana = 12
    case apple
    case melon
    case lemon
    case peach
    
    var stringValue: String {
        get {
            switch self {
            case .apple: return "apple"
            case .banana: return "banana"
            case .lemon: return "lemon"
            case .melon: return "melon"
            case .peach: return "peach"
            }
        }
    }
}


var a = Fruit.lemon
switch a {
    case .banana :
        print("banana")
    case .apple :
        print("apple")
    case .melon :
        print("melon")
    case .lemon :
        print("lemon")
    case .peach :
        print("peach")
}
print(a.rawValue, a.stringValue)

이 코드를 실행해보면

lemon

15 lemon 

와 같은 두줄이 뜨게 되는데 첫줄은 switch문에의한 print이고 두번째 줄은 switch 이후의 print문이다.

enum은 rawValue를 지정해줘서 가져올수 있는데 

rawValue를 위에 banana = 12 로만 주면 아래에 들어가는 값을 자동으로 순서대로 지정된다.

추가로 enum에는 stringValue처럼 값을 지정해주거나 func을 새로 넣어 줄 수 있어 조건문같은와 같이 쓰기 매우 좋은 형태이다.

 

- 변수에 대괄호를 열어 get을 정의해줬는데 이에 대해서는 앞 글에서 다루지 않아 이후에 또 다룰수 있으면 좋겠다.

- 함수에 대해서도 다룬적이없다.

1. let 과 var 그리고 print 함수( https://wiwi-pe.tistory.com/88?category=976417 )

2. 할당연산자와 덧셈과 뺄셈 ( https://wiwi-pe.tistory.com/91?category=976417 )

3. 스위프트에서의 자료형, 그리고 옵셔널 ( https://wiwi-pe.tistory.com/97?category=976417 )

4. 곱셈과 나눗셈 그리고 복합할당연산자 ( https://wiwi-pe.tistory.com/99?category=976417 )

5. 비교 연산자 ( https://wiwi-pe.tistory.com/100?category=976417 )

6. 조건문과 반복문 ( https://wiwi-pe.tistory.com/105?category=976417

7. 3항 연산자 ( https://wiwi-pe.tistory.com/106?category=976417 )

8. nil-coalescing 연산자 ( https://wiwi-pe.tistory.com/107?category=976417 )

9. 범위 연산자 ( https://wiwi-pe.tistory.com/119?category=976417 )

10. 논리 연산자 ( https://wiwi-pe.tistory.com/120?category=976417 )

11. 열거형 enum ( https://wiwi-pe.tistory.com/216 )

기본연산자 목록에 안넣어버린 논리연산자다.

이전에 데이터 타입 불을 다룰때 잠깐 했던거 같기도하다.

 

논리 연산은

참과 거짓에 대해 연산하는거다 그래서 기본적으로 boolean형식으로 값이 나온다.

 

Logical Not Operator

not 연산은 불 연산을 뒤집는연산이다.

만약 참에 대해 not 을 붙이면 거짓이 되고

거짓에 대해 not을 붙이면 참이된다.

 

not 연산자는 느낌표를 붙이면된다.

 

ex1:

        var target = false
        print(!target)
        
        target = !target
        print(target)

결과:

true

true

 

처음 target이 false이지만 print할때 ! 를, not 연산자를 붙여서 print할땐 true가 출력된다.

그다음엔 target에 !target을 해서 true값으로 변경된다.

 

Logical And Operator

and 연산은 두 불형식 값이 모두 참일때 참으로 결과가 나오는 연산이다.

 

연산자로는 &&를 사용한다.

단 여러 if문이 겹치는형태를 축약하는 형태로 같은 and역할을 하게 끔 할 수도 있다 

ex2)

        let target1 = false
        let target2 = true
        let target3 = true
        
        if target1 && target2 {
            print("이 글은 출력되지 않는다.")
        }
        
        if target2 && target3 {
            print("두 값은 모두 참이다.")
        }
        
        if target2, target3 {
            print("이렇게도 쓴다.")
        }
        
        if target1, target3 {
            print("이 글은 출력되지 않는다.")
        }

결과:

두 값은 모두 참이다.

이렇게도 쓴다.

 

 

 

Logical Or Operator

and를 했으니 이제 or이다.

둘중 하나만 참이면 참으로 결과가 나오는 연산이다.

 

위의 예제를 살짝 바꿔서 아래 예시를 만들어봤다.

 

ex2)

        let target1 = false
        let target2 = true
        let target3 = true
        
        if target1 || target2 {
            print("이 글이 출력된다")
        }
        
        if target2 || target3 {
            print("두 값중 하나는 참이다.")
        }

결과:

이 글이 출력된다

두 값중 하나는 참이다.

 

 

연산자 파트를 모두 끝냈다!

다음엔 어떤 기본 강좌를 할지는 모르겠다.

 

드디어 기본 연산자 마지막 편이다.

범위연산자가 이전에 한번 잠깐 다룬적이 있다.

 

Closed Range Operator( 폐쇄 범위 연산자)

범위연산자는 말그대로 범위를 정의하는 연산이다

이전에 for 문을 적을때 아래와같은 형태로 적었는데

 

for i in 0 ... 10 {

}

 

0 ... 10 이 부분이 범위 연사자를 사용한 부분이다.

0이상 10이하를 지정한것인데 for 문은 이러한 범위에서 순서대로 0, 1, 2 가져오며 반복한다는 의미이다.

 

0 ... 10 이러한 범위 연산자를 폐쇄 범위 연사자라 하며

양 끝이 정해져있다 하여 폐쇄 이다.

그럼 양끝이 정해져있지 않은것도 있다.

 

 

Half-Open Range Operator

한글로 뭐라고 번역해야 할지 모르겠다.

위의 폐쇄 범위 연산자와 유사한데 

맨 뒤 끝 이전까지 범위를 지정한 것을 일컫는다.

 0 ..< 10 이렇게하면 0이상 10미만이다. 점이 이번엔 두개다 중요한 부분이다.

 

 

 

One-sided Ranges( 단측 범위 연산자 )

이번엔 양 끝중 한쪽만 범위를 지정한 것이다.

이미 있는 배열에 대해 범위를 지정할때 이미 양끝이 정해져 있기에 한쪽만 지정해줘서 편하게 사용한다.

위의 폐쇄, 하프오픈 범위 연산자랑 비슷하다.

 

ex1)

    let alphabet = ["A","B","C","D","E"]
    for c in alphabet[...2] {
      print(c)
    }
    
    print()
    
    for c in alphabet[..<2] {
      print(c)
    }
    
    print()
    
    for c in alphabet[2...] {
      print(c)
    }
    
    print()

결과:

A

B

C

 

A

B

 

C

D

E

 

첫번째 for문은 alphabet 배열의 처음부터 인덱스2, 그러니까 처음부터 세번째까지 범위를 지정하여 

print문에서 A B C가 출력된것이다.

 

두번째 for문은 alphabet 배열의 처음부터 인덱스2이전까지, 그러니까 처음부터 두번째까지 범위를 지정하여

print문에서 A B가 출력된다.

 

세번째 for문은 인덱스 2 부터(세번째 부터) 끝까지  범위를 지정하여 

print문에서 C D E가 출력되었다

 

단 2초과에 해당하는 <.. 은 없다

스위프트에는 사용자가 직접 연산자를 지정할 수 있는데 만약 필요하다면 지정해서 사용하면 된다.

 

 

이것 외에도 따로 range를 생성해서 지정해줄수 있다.

해당 부분에 대해 알고 싶다면 Range, NSRange에 대해 검색해봄이 좋을듯하다.

난 따로 생성해서 지정할땐 String의 부분을 추출하거나 부분 속성을 변경해줄때만 사용해보고 그외엔 없다.

 

슬슬 기본 연산자 파트가 마무리 되어간다.

달에 한두개씩 올리던 기본서는 기본연산자 파트에서 그만두게 되고,

이후에는 기본 연산자가 아닌 다른 내용으로 짬짬히 올리게 될듯하다.

 

우선 닐 코레싱? 뭐라 읽어야할지도 난감한 파트가 왔다.

내 짐작컨데 옵셔널의 해제를 해보는 파트인듯해서 우선 옵셔널에대해 예시를 들것이다.

 

내가 학부때 공부할때만 해도 자바에 옵셔널에대해 들어본적이 없었는데 요즘 뭔가 생긴듯하여

스위프트만의 특징이다! 라고 말할 수 는 없게되어 아쉽다.

 

이 옵셔널은 값의 존재 유무를 모를때 사용 할 수 있는 하나의 안전장치이다.

일반적인 경우에서 어떠한 변수 a값을 사용하려고 할때 이 a값에 아무런 값이 설정되어 있지않다면 아마 nullpoter error가 뜨게 될것이다.

비어 있는 값을 참조했기에 진행할 수 없다고 말하는것인데

이러한 사태에 대해 안전장치로 사용할 수 있는것이 바로 옵셔널이다.

 

형식은 매우 단순하다

형식)

 

var 변수이름:변수타입? 

 

위와같이 타입에 물음표를 붙이면된다.

이 타입인건가 하며 묻는듣한 모습에 바로 이해가 갈 것이라 생각된다.

 

이 옵셔널에 예시를하나 들어보자면

var name : String? 이 있겠다

참고로 이렇게 바로 선언하면 name값에는 nil 값이 들어가게 된다.

여기서 nil은 아무런 값이 없다는 뜻이다.

 

이제 값을 넣고 출력해보면 아래와같이 나온다.

 

예시1)

    var name:String? = "wiwi"

    print(name)

결과:

Optional("wiwi")

 

값이 wiwi지만 겉에 Optional()이라고 붙어있는게 바로 물음표의 역할이다.

옵셔널로 나오기에 바로 이값을 사용할 수는 없다.

그래서 이 옵셔널에서 값을 추출해줘야한다.

 

이옵셔널에 대해 이야기한적이 있나 살펴보지 3편에서 다뤘었다.

3편의8항 옵셔널 편에서 

값을 추출하기위해 느낌표, !를 붙인다고 적었다.

실제로 위 예시1)을 느낌표를 붙이고 출력하면 아래와같이 무사히 값이 나온다.

 

예시2)

    var name:String? = "wiwi"

    print(name!)

결과:

wiwi

 

이러한 옵셔널을 다루기위해선 위의 ! 와 같이 값을 추출해야하는데

이럴때 값을 더 안전하게 추출하는 연산자가 이 nil-coalescing 연사자로 추측된다.

 

위의 name을 이전편 3항연산자를 이용해서 풀어보자면

 

(name != nil ? name! : "wiwi2")

로 표현할 수 있겠는데

이는 name의 값이 nil 이 아닐경우 name을 ! 를 사용해서 바로 값을 추출한다는것이고

만약 값이 없을경우 wiwi2를 반환한다는 간략한 식이다.

 

이를 더 간략히 이번 편의 주제인 nil-coalescing 연산자를 이용하자면 ( 형태: ?? )

 

name ?? "wiwi2" 가 되겠다

코드로 돌려보자면 아래와같다.

 

예시3)

    var name:String?

    print(name ?? "wiwi2")

    

    name = "wiwi"

    print(name ?? "wiwi2")

결과:

wiwi2

wiwi

 

라인 1의 name은 값을 할당하지 않았기에 print시에 ?? 를 통해 wiwi2값이 나오게되고

라인 4의 name은 wiwi값을 할당한 상태이기에

라인 5의 print에선 wiwi값이 나오게된다.

 

2편에서 

연산자 4번

3차 조건 연산자라고 썻던걸 번역이 이상한지 아님 스위프트는 그렇게 부르는지 모르겠지만 일단 잘 아는 3항 연산자로 이름을 변경했다.

 

이번 편의 내용은 홈페이지에선 Ternary Conditional Operator  라고 적혀있는 부분의 내용이다.

 

이전편, 6편에서 한 조건문을 다시좀 보자

 

예시1)

    let flag = "apple"

    var a = 0

    if flag == "apple" {

      a = 10

    } else {

      a = 20

    }

    print(a)

결과:

10

 

flag라는 이름의 변수가 apple일때 a값을 10 그렇지 않으면 20으로 설정하는 간단한 예시이다.

3항 연산자는 이렇게 하나의 값에 의해 값이 두가지로 나눠져 선택해야할때 쓰면 간편하게 사용 가능한 연산자이다.

 

형태)

조건문 ? 조건문이 참일때 값 : 조건문이 거짓일때 값

 

예시1번을 3항연사자로 변경하면 아래와 같다

 

예시2)

    let flag = "apple"

    let a = flag == "apple" ? 10 : 20

    print(a)

결과:

10

 

a값을 저장할때 if flag == "apple"부분을 예씨2 번과 같이 적으면 동일한 결과가 된다.

값을 꼭 선언한 변수에 저장하지 않아도 된다.

 

예시3)

    let flag = false

    let sum = 10 + 20 + (flag ? 30 : 40)

    print(sum)

결과:

70

 

예시3번 처럼 연산 중간에 바로 사용해도 가능하다.

 

원래는 6편을 스위프트 언어 공식문서에 Ternary Conditional Operator 라 소개되어있는 연산자에 대해 쓰려고 했으나

해당 내용에 들어갈 조건문부분을 따로 쓰는게 좋을듯하여 본편은 조건문을 다룬다.

 

조건문은 별 다른게없다 분기문이라고 할 수 있다.

 

1~5편 사이의 예제문을 실행해봤다면 알겠지만

여태 실행은 위에서 아래로 차례차례 한줄한줄 실행이 되었다.

 

그런데 모든일이 그렇듯 순서대로 해결하려하면 일이 제대로 처리되지않는 일이 있다.

이를 조건문으로 해당 일들을 분기하여 처리한다.

 

 

조건문

 

1. if 

우선 다룰 if문은 단순하다

네이버사전에서 if에 대해 검색하면 " 만약 ~ 한다면 " 이라는 뜻으로 나온다.

예시도 If you see him ~ 그를 만난다면 으로 예시를 들고있다

 

스위프트에서의 if의 취급도 동일하다

단 if 뒤에 붙는녀석은 이전의 비교연산자와 같은 Bool형태의 값이 붙어서 사용된다.

 

형식-

if 조건  {

  실행문

}

 

이전편에서 나온 비교연산자를 이용해 if문의 예시를 들자면 아래와같다.

 

예시1)

    if 41 {

      print("1번 출력")

    }

    

    print("2번 출력")

결과:

2번 출력

 

해당 소스는 프린트 출력이

2번 출력 

으로 나오게 될것인데

if 4 < 1 의 대괄호 안에 들어가 있는 애는 출력이 되지않는다.

if다음에 나오는 비교연산 4 < 1 이 거짓이기에 해당 if문 안의 내용은 실행되지 않는다.

 

이와 같이 어떠한 조건에 따라 실행 유무를 가리는게 if문 이고 조건문이다.

 

예시2)

    let a = 30

    let b = 40

    

    if a < b {

      print("1번 출력")

    }

    

    print("2번 출력")

 

결과:

1 출력

2 출력

 

 

2. if - else if - else

1번에서 if문은 if뒤에 나오는 조건에 따라 실행 여부를 가렸다.

조건에 따라 실행여부가 두가지 이상일때는 계속 if문만 쓰기에는 힘들다 

 

if문 만을 사용해 두 수를 비교했을때의 경우 아래와 같이 할 수 있다.

 

예시3)

    let a = 30

    let b = 30

    

    if a < b {

      print("1")

    }

    if a > b {

      print("2")

    }

    if a == b {

      print("3")

    }

결과:

3

 

이를 줄이려면 else 와 elseif 를 사용하면된다.

 

 

형식)

if 조건1 {

   실행문1

} else if 조건2 {

  실행문2

} else if 조건3 {

  실행문3

} else {

  실행문4

}

 

 

else if는 연속되게 이전 if 조건이 거짓일경우 확인해보는 것이고

else 는 위의 if들이 전부 거짓일때 실행되는 경우이다

위의 소스를 아래와같이 변경할 수 있다.

 

예시4)

    let a = 30

    let b = 30

    

    if a < b {

      print("1")

    } else if a > b {

      print("2")

    } else {

      print("3")

    }

결과:

3

 

위 예시4는 예시3과 비교했을때 라인수에 대한 이득은 없다.

코드로만 보면 단순히 조건문이 연결되어 가독성이 조금 좋아질뿐이다.

하지만 실제로 돌려보면 예시4에선 저 조건문 총 세번 결과를 보지만

만약 첫번째 조건문이 참일경우 뒤의 연결된 조건은 보지않는다.

실행하는쪽에서 연산을 아끼는 이득이된다.

 

3. swich 문

switch문은 조건문 이라고 부르기가 좀 이상했는데 일단 이곳에 포함시켰다.

스위치문은 조건이 되는 어느 한 값이 어떠한 값을 가질때 이를 실행해라와 같은 느낌이다

예를 들어

let a = "바나나" 라는 a가 있을때

이 a가 바나나가 저장되어 있을 수 잇고.

사과, 또는 멜론 등의 여러가지가 있을 수 있을때 해당 내역을 적는 조건문이다.

 

형식)

 

switch 대상 {

  case 대상과 일치하는지 비교하는 값1: 

    실행문1

  case 대상과 일치하는지 비교하는 값2:

    실행문2

  case 대상과 일치하는지 비교하는 값3:

    실행문3

  default: //위의 모든 case들이 대상과 다를경우 실행

    실행문4

}

 

예시 5)

    var a = "banana"

    switch a {

      case "banana" : print("banana")

      case "apple" : print("apple")

      case "melon" : print("melon")

      case "lemon" : print("lemon")

      case "peach" : print("peach")

      default: print("다른 종류이다.")

    }

결과:

banana

 

이 스위치문은 enum타입의 변수일때 정말 편함을 느낄 수 있는 좋은 녀석인데 이전 3편의 데이터형에서 깜빡한건지 enum에 대한걸 다루지 않았다.

나중에 다루게될것같다. 

 

 

 

 

 

반복문 

반복문은 말그대로 반복하는데 사용한다.

여러 가지 계산에대해 반복적으로 해야하는 사항이 있을때 사용한다.

 

1. while

대상 조건이 거짓이 될때까지 반복하고자 할때 사용한다.

 

형식)

while 조건 { //조건은 시작할땐 참이여야 한다. 참이 아닐경우 시작을 안하고 넘어간다.

  반복할 실행문

  조건을 변화시킬 실행문

} // while문 내부 블록의 조건을 변화시킬 실행문은 없어도 된다. 단 블록 외부에서도 조건에 대한 변화가 없다면 무한루프에 빠지게된다.

 

간략히 어느한 값을 30번정도 반복시키는 while문의 예시를 들어본다.

 

예시6)

    var count = 0

    

    while count < 5 {

      count += 1

    }

    print(count)

결과: 

30

 

count에 계속 +1 식하면서 count값이 30보다 작은지에 대해 검사한다.

해당 루프문은 5보다 작으면 실행하라 인데 실 결과는 30인 이유는

순서가

1. count가 5보다 작은가

2. count에 1 더하기

이런순으로 하기에 그렇다.

 

 

2. repeat - while

위에 while은 순서가 count의 조건을 먼저 확인했는데

반대로 실행먼저하고 조건을 보고싶을 경우도 있다

이럴땐 repeat while문을 쓰면된다.

 

형식)

repeat {

실행문

} while 조건

 

 

위와 결과는 같으나 실행순서만 다른 예제를 들면

 

예시7)

    var count = 0

    

    repeat {

      count += 1

    } while count < 5

    print(count)

 

결과: 5

 

예시6번을 뒤집어본 소스이다

실제로 일단 count값을 먼저 증가시키고 

그후에 다시 실행시킬것인가에 대해 검사를한다.

 

 

3. for문

for문은 주로 인덱스에 해당하는 변수와 같이 사용할때 쓴다.

위에서 count를 사용한것과 비슷한데

while은 사실 저렇게 단순히 +1할때 쓰지는 않는다. for문이 이러한 순서대로 증가하는 값이 필요할때 사용한다.

 

형식)

for 변수1 in 변수1에 담을것 {

  실행문

}

 

예를 들어

1 부터 10까지의 합을 구하려고한다 그러면 아래와 같다

 

예시8)

    var sum = 0

    for i in 1 ... 10 {

      sum += i

    }

    print(sum)

결과:

55

 

sum에 1부터 10까지 변하는 i의 값을 모조리 더하는 반복문이다.

 

1 ... 10 은 Range 타입의 변수를 바로 정의하면서 사용하는것이다.

이 부분은 배열이 들어가도 좋고, 실제로 배열을 넣어서 많이 사용한다.

배열을 넣어서 사용하자면

 

예시9)

    let exArray = ["banana", "apple", "melon","lemon" ,"peach"]

    for i in exArray {

      print(i)

    }

결과:

banana
apple
melon
lemon
peach

 

와 같이 된다.

오른쪽에 있는 값이 여러가지를 가지고있는 녀석을 왼쪽의 변수에 하나씩 차례대로 넣어서 활용하는것이다.

 

Range에 대해서는 나중에 좀더 다뤄볼 수도 있고 없을 수도 있으니 만약 이글로 swift를 공부중이라면 따로 찾아보는것을 권한다.

 

 

 

비교 연산자는 결과값이 False or True로 나오는 연산자이다.

 

좌항과 우항을 비교하여 Bool형 값을 반환하는 연산자이다.

기호는 

==

!=

>

<

>=

<=

를 사용한다.

 

 

1.  == 와 != ( 같으면, 다르면)

 

a1과 b1가 각각 5와 4일경우

let a1 = 5

let b1 = 4

 

두 상수를 비교하면 

let a = a1 == b1

let b = a1 != b1 

 

같이 표현하며

a의 값은 false 가 되며 b는 true가 된다.

 

이렇게 변수에 저장하는것 보단 후에 나올 흐름제어, 조건문에서 같이 많이 사용하게 될것이다.

 

위의 예제처럼

== 는 우항과 좌항이 같을 경우 true, 아니면 false를 반환한다.

!= 는 우항과 좌항이  다를 경우 true를 아니면 false를 반환한다.

 

3. > 와 < (크다면, 작다면)

 

위의 a1,b1을 재활용해서 비교해보자

a1 > b1의 값은 true이다. > 는 좌항이 우항보다 클 경우 true를 반환한다.

a1 < b1의 값은 false이다. < 는 우항이 좌항보다 클 경우 true를 반환한다.

 

4. >= 와 <= (이상, 이하)

let a2 = 5

let b2 = 10

let c1 = 5

 

일경우 

let g = a2 >= b2 // false

let h = a2 <= b2 // true

let i = a2 >= c1 // true

 

위에서 부터 

a2 가 b2보다 크거나 같은가

a2 가 b2 보다 작거나 같은가

a2 가 c1 보다 크거나 같은가 

이다.

 

 

5. Equatable

모든 값이 비교연산자가 사용가능한것이 아니다.

비교 연산자가 사용 할 수 있는 형식은 Equatable의 규칙을 따르는 데이터형만이 가능하다.

스위프트에서는 프로토콜 이라는 규칙들이 있다. 이는 사용자가 정의할 수 있고 언어에서 미리 정의해둔 규칙이다.

그런 여러 프로토콜중에 Equatable이라는 규칙이 있고 이는 좌항과 우항이 비교할때 어떤식으로 비교가 될것인가를 규정해둔 규칙이다.

이 스위프트 기본이라는 글들을 언제까지 쓰게 될지 모르겠지만 프로토콜까지 쓰게 된다면 상당히 훗날의 일이 될것이다.

+ Recent posts