-
[레인스톤 iOS] 스위프트 easy하게 배워볼까? - 연산자(2)Swift 기초문법 2022. 1. 27. 13:58반응형
안녕하세요!
iOS개발자로 일하고있는 레인스톤입니다:)
오늘은 연산자 2편!
삼항 연산자부터 알아보겠습니다.
삼항 조건 연산자
let myMoney = 1_000_000 var describeMySelf = "" if myMoney >= 1_000_000_000 { describeMySelf = "부자" } else { describeMySelf = "거지" } print(describeMySelf) //거지ㅠㅠ
자 이런 코드가 있다고 가정할 때 삼항 조건 연산자를 활용하면 코드가 어떻게 달라질까요?
힌트~! 삼항 조건 연산자는 기본적으로 question ? answer1: answer2 의 구조를 가지고 있습니다.
let myMoney = 1_000_000 let describeMySelf = myMoney >= 1_000_000_000 ? "부자":"거지" print(describeMySelf)
짠 ~ 코드가 매우 간결해졌죠?
삼항 조건 연산자는 코드를 짧게 만들어 가독성을 높이는데 좋습니다:)
삼항 연산자와 nil의 병합
let defaultStatus = "행복" var sadness: String? print(sadness ?? defaultStatus) // 행복
nil 병합 연산자는 기본적으로 a ?? b 의 구조를 가지고 있습니다.
a의 값이 nil이라면 b의 값을 선택하는 개념입니다.
반대로 nil이 아니라면 a의 값을 선택하는 것이죠!
let defaultStatus = "행복" var sadness: String? sadness = "슬픔" print(sadness ?? defaultStatus) // 슬픔
그래서 sadness 변수에 값이 생긴다면? 슬픔이 출력됩니다.
nil 병합 연산자는 삼항 조건 연산자와 nil을 활용해서 만들어졌습니다.
따라서 풀어서 살펴보면 아래와 같은 구조를 가지고 있습니다.
let defaultStatus = "행복" var sadness: String? print(sadness != nil ? sadness! : defaultStatus) // 행복
일반적으로는 a ?? b의 형태로 사용합니다:)
범위 연산자
닫힌 범위 연산자
for i in 1...5 { print(i) } /* 1 2 3 4 5 /*
(a...b)의 형태로 일반적으로 for-loop와 함께 사용됩니다.
반 닫힌 범위 연산자
for i in 1..<5 { print(i) } /* 1 2 3 4 */
(a..<b)의 형태로 닫힌 범위 연산자와의 차이점이 보이시나요?
닫힌 범위 연산자가 a부터 b를 모두 출력하는 것에 반해
반 닫힌 범위 연산자는 a부터 b-1까지의 값을 갖게됩니다.
그렇기 때문에 배열의 인덱스에 접근할 때 편하게 사용할 수 있습니다.
배열의 인덱스는 0부터 시작하기 때문에 배열의 count-1까지 인덱스를 가지고 있기 때문이죠!
var array = [1, 2, 3, 4, 5] for i in 0..<array.count { print(array[i]) } /* 1 2 3 4 5 */
단방향 범위 연산자
var array = [1, 2, 3, 4, 5] print(array[2...]) // [3, 4, 5] print(array[...2]) // [1, 2, 3] print(array[..<2]) // [1, 2]
[a...] [...a]의 형태로 범위의 시작 또는 끝만 정해주는 연산자도 있습니다.
물론 반 닫힌 연산자를 활용해서도 사용이 가능합니다.
let range = ...5 print(range.contains(1)) // true print(range.contains(2)) // true print(range.contains(5)) // true
이런 방식으로 subscript뿐만 아니라 특정 값 포함 여부도 확인할 수 있습니다.
이 때 range의 타입은 PartialRangeThrough<Int>입니다.
논리 연산자
논리 부정 연산자
let wannaGoToBed = true if !wannaGoToBed { print("그래 공부해") } else { print("그래도 공부해^^") } // 그래도 공부해^^
!a 의 형태를 가지며 true를 false로 false를 true로 바꿔줍니다.
논리 곱 연산자
let swiftGood = true let iosGood = true if swiftGood && iosGood { print("합격") } else { print("불합격") } // 합격
a&&b 의 형태를 가지며 두 조건이 모두 true일 때를 의미합니다.
취직 조건이 논리 곱 연산자라면(?) swift와 iOS를 모두 잘해야겠군요!
논리 합 연산자
let swiftGood = true let iosGood = false if swiftGood || iosGood { print("합격") } else { print("불합격") } // 합격
a||b 의 형태를 가지며 두 조건 중 하나의 조건만 true일 때에도 true를 의미합니다.
취직 조건이 논리 합 연산자라면(?) 오호... 둘 중에 하나만 잘 해도 합격이 되겠네요:)
논리 연산자의 조합
let swiftGood = true let iosGood = false let csGood = false let algorithmGood = true if swiftGood && iosGood || csGood || algorithmGood { print("합격") } else { print("불합격") } // 합격
윽... 복잡해지기 시작했습니다.
이런 경우 논리 계산의 순서가 어떻게 될까요?
swift의 논리 연산자 &&와 ||는 왼쪽의 표현을 우선해서 논리 계산을 합니다.
그럼 비록 swiftGood && iosGood이 false라도 false || false || true 이기 때문에 합격입니다!
코테만 잘봐도 합격할 수 있다!?!?
명시적 괄호
let swiftGood = true let iosGood = false let csGood = false let algorithmGood = true if (swiftGood && iosGood) || csGood || algorithmGood { print("합격") } else { print("불합격") } // 합격
물론 이렇게 괄호를 사용하여 명시적으로 순서를 지정해줄 수도 있습니다.
이렇게 지정해주면 코드 가독성이 훨~씬 좋아지겠죠?
끗!
이렇게 2편에 걸쳐서 연산자에 대해 알아봤습니다.
다음엔 문자열과 문자로 돌아오겠습니다!
반응형'Swift 기초문법' 카테고리의 다른 글
[레인스톤 iOS] 스위프트 easy하게 배워볼까? - 콜렉션 타입(1) (0) 2022.02.12 [레인스톤 iOS] 스위프트 easy하게 배워볼까? - 문자열과 문자(3) (0) 2022.02.10 [레인스톤 iOS] 스위프트 easy하게 배워볼까? - 문자열과 문자(2) (0) 2022.02.03 [레인스톤 iOS] 스위프트 easy하게 배워볼까? - 문자열과 문자(1) (3) 2022.01.29 [레인스톤 iOS] 스위프트 easy하게 배워볼까? - 연산자(1) (0) 2022.01.26