티스토리 뷰

iOS

[Swift] 기본 연산자 (Basic)

Peppo 2021. 12. 5. 00:42
728x90

연산자 용어

 

  • 단항 연산자
    -a 
    !b
    c!​
  • 이항 연산자
    2 + 3
  • 삼항 연산자 
    a ? b : c 
    // a가 true면 b를 return
    // 아니면 (else) c를 return​

할당 연산자

상수, 변수에 모두 사용 가능하며, 값을 초기화 시키거나 변경 합니다. 

let b = 10 
var a = 5
a = b // a 값은 10

 

여러 값을 한번에 할당 할 수도 있습니다.

let (x, y) = (1, 2)
// x 값은 1, y 값은 2

사칙 연산자

  • 덧셈 ( + ), 뺄셈 ( - ), 곱셈( * ), 나눗셈( / )

 

나머지 연산자

a % b 와 같이 나머지 연산을 지원합니다.

11 % 2   // 1 
8 % 2    // 0

 

단항 음수 연산자 

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

 

단항 양수 연산자 

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

 


합성 할당 연산자

var a = 1
a += 2     // a = a + 2 와 같은 뜻 
// 결과 값 : a는 3


// 실습1
var b = 3 
b -= 3

 

답: 0

 


비교 연산자 

각 비교 연산은 true와 false 값을 반환 합니다. 

// 같다
a == b
1 == 1  // true

// 같지않다
a != b
2 != 1  // true

// 크다, 작다
a > b
a < b
2 > 3   // false

// 크거나 같다, 작거나 같다
a >= b
a <= b
2 <= 1  // false
// 실습2 
nil == ""   // 답:
nil == 0    // 답:

 

답: false/ false

 

 

같은 타입을 갖는 두 개의 튜플을 비교할 수 있습니다. 

튜플의 비교는 각 첫번째 항을 비교 후 값이 같으면, 다음 항을 비교하여 Bool 값을 나타냅니다. 

string을 비교할때는 abc(사전순서)로 비교합니다. 

 

(1, "zebra") < (2, "apple")   // true, 1이 2보다 작고; zebra가 apple은 비교하지 않기 때문
(3, "apple") < (3, "bird")    // true 왼쪽 3이 오른쪽 3과 같고; apple은 bird보다 작기 때문
(4, "dog") == (4, "dog")      // true 왼쪽 4는 오른쪽 4와 같고 왼쪽 dog는 오른쪽 dog와 같기 때문

 

// 실습3 

("zedd", 1) < ("peppo", 1)    // 답은?
(true, 3) < (true, 4)         // 답은?

 

답:

false 

에러 (Bool 타입은 비교연산자로 비교불가)


삼항 조건 연산자

구조 

question ? answer1 : answer2

question이 true일 경우 answer1

                   false일 경우 answer2 가 실행 됩니다.

 

 

if 문으로 바꿔보자면 

if question {
	answer1 
} else {
	answer2
}

 

예제

let contentHeight = 40 
let hasHeader = true
let rowHeight = contentHeight + (hasHeader ? 50 : 20)
// rowHeight는 90 (40 + 50)

 


Nil 병합 연산자 

 

구조

a ?? b
// a가 nil이 아니면 a를 내보내고, a가 nil이면 b를 내보냅니다.

// a != nil ? a! : b 와 같은 뜻 입니다.

 

예제

var defaultColorName = "red"
var userDefinedColorName: String?    // 이 값은 현재 nil 입니다.

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

// green

 

 


범위 연산자

for-in loop에 자주 사용되며,시작과 끝이 있는 연산자 이고  ( a..b ) 의 형태 입니다.



for idx in 1...5 {
    print("\(idx) times 5 is \(idx * 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

 

반 닫힌 범위 연산자

( a..< b ) 의 형태로 a 부터 b 보다 작을때 까지 범위를 갖습니다. 

let names = ["Anna", "Alex", "Brian", "Jack"]
let count = names.count    // count는 4 
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

 

단방향 범위 연산자

a... )의 형태로 해당 부분 부터 끝까지, 또는 처음부터 a까지의 범위를 지정해 사용하는 범위 연산자 입니다.

let names = ["Anna", "Alex", "Brian", "Jack"]

// names 배열의 index 2번째 부터 끝까지
for name in names[2...] {
    print(name)
}
// Brian
// Jack

// names 배열의 처음부터 index2까지
for name in names[...2] {
    print(name)
}
// Anna
// Alex
// Brian

논리 연산자

논리 부정 연산자

형태는 !a 이렇게 생겼으며, 값 앞에 ' ! ' 를 붙여 기존 Bool값의 반대를 나타냅니다.

let allowedEntry = true
if !allowedEntry {
    print("ACCESS")
} else {
    print("ACCESS DENIED")
}
// Prints "ACCESS DENIED"

 

논리 곱 연산자

 

형태는 ( a && b ) 이렇게 생겼으며, a와 b가 같을 경우 true를, 하나라도 다르면 false를 나타냅니다.

let enteredDoorCode = true
let passedRetinaScan = false
if enteredDoorCode && passedRetinaScan {
    print("Welcome!")
} else {
    print("ACCESS DENIED")
}
// Prints "ACCESS DENIED"

 

논리 합(OR) 연산자

형태는 ( a || b ) 이렇게 생겼으며, a와 b가 하나라도 true일 경우, true를 나타냅니다.

let hasDoorKey = false
let knowsOverridePassword = true
if hasDoorKey || knowsOverridePassword {
    print("Welcome!")
} else {
    print("ACCESS DENIED")
}
// Prints "Welcome!"

 

논리 연산자의 조합

논리 연산자를 조합해서 사용할 수 있습니다.

가독성을 높이기 위해 괄호를 사용해 코드의 의도를 더 명확하게 합시다 ~

let enteredDoorCode = true
let passedRetinaScan = false
let hasDoorKey = false
let knowsOverridePassword = true


if (enteredDoorCode && passedRetinaScan) || hasDoorKey || knowsOverridePassword {
    print("Welcome!")
} else {
    print("ACCESS DENIED")
}

 

결과 값: "Welcome!"

 

 


728x90

'iOS' 카테고리의 다른 글

[Swift] mutating  (0) 2021.12.11
[Swift] The Basics  (0) 2021.12.08
[Swift] Lazy Stored Properties (지연 저장 프로퍼티)  (0) 2021.11.30
[iOS] DatePicker, DateFormatter  (0) 2021.11.25
[Swift] 프로퍼티 (Properties)  (0) 2021.11.24