소소한개발팁
article thumbnail
반응형

Assignment Operator

 - 할당 연산자는 아래와 같습니다.

 

let b = 10
var a = 5
a = b
// a is now equal to 10

 

할당 연산자를 이용하여 아래와 같이도 값을 초기화할 수 있습니다.

 

let (x, y) = (1, 2)
// x is equal to 1, and y is equal to 2

 

 

Arithmetic Operators

 

  • 더하기 (+)
  • 빼기 (-)
  • 곱하기 (*)
  • 나누기 (/)

 

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

 

 

Remainder Operator

  • 나머지 (%)

 - (%) 를 사용하여 구할 수 있으며 위의 그림은 공식 홈페이지에서 제공되는 9 % 4의 작동방식을 표현한 그림입니다.

 - 9 = (4 x 2) + 1

 

 

Unary Operator

 - 숫자 값 앞에 기호를 사용하여 토글할 수 있습니다. 

 

- 빼기 (-)

 

let three = 3
let minusThree = -three // minusThree equals -3
let plusThree = -minusThree // plusThree equals 3, or "minus minus three"

 

- 더하기 (+)

 

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

 

 

Compound Assignment Operators

Swift에서는 +=, -= 와 같은 복합 할당 연산자를 사용할 수 있습니다.

 

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

 

하지만 아래와 같은 형태로는 사용할 수 없습니다.

 

let b = a += 2.

 

 

Comparison Operators

  • ~와 같다. (a == b)
  • ~와 같지 않다. (a != b)
  • a가 b보다 크다 (a > b)
  • a가 b보다 작다 (a < b)
  • a가 b보다 같거나 크다 (a >= b)
  • a가 b보다 같거나 작다 (a <= b)

- 아래는 예시입니다.

 

1 == 1 // true because 1 is equal to 1
2 != 1 // true because 2 isn't equal to 1
2 > 1 // true because 2 is greater than 1
1 < 2 // true because 1 is less than 2
1 >= 1 // true because 1 is greater than or equal to 1
2 <= 1 // false because 2 isn't less than or equal to 1

 

- 보통 비교연산자는 조건문에서 많이 사용되며 아래와 같은 예시 형태입니다.

 

let name = "world"
if name == "world" {
  print("hello, world")
} else {
  print("I'm sorry \(name), but I don't recognize you")
}
// Prints "hello, world", because name is indeed equal to "world".

 

- 동일한 유형과 동일한 수의 값을 가진 두 튜플을 비교할 수 있습니다. 튜플은 왼쪽에서 오른쪽으로, 한 번에 한 값씩 비교되며, 비교가 같지 않은 두 값을 찾을 때까지 비교된다. 이 두 값을 비교하고, 그 비교의 결과가 튜플 비교의 전반적인 결과를 결정합니다. 모든 원소가 같다면, 튜플 자체는 동일합니다. 아래와 같은 예시입니다.

 

(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"

 

- 위의 예에서 첫 번째 줄에 왼쪽에서 오른쪽으로 비교하는 동작을 볼 수 있습니다. 

왜냐하면 1 보다 2가 작기 때문입니다. 튜플의 뒤의 값은 무시합니다.

그러나, 두번째 줄과 세 번째 줄처럼 튜플의 첫 번째 원소가 같을 때, 튜플의 두 번째 원소를 비교합니다.

하지만 아래와 같이 Bool 값이 온다면 비교할 수 없으므로 에러가 발생합니다.

 

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

 

 

Ternary Conditional Operator

다중 조건 연산자는 question ? answer1 : answer2 형태로 이루어져 있습니다. question의 값이 참일 경우 answer1을 아닐 경우 answer2를 리턴합니다.

 

if question {
answer1
} else {
answer2
}

 

- 테이블 행의 높이를 계산하는 예입니다.  행 높이는 행에 헤더가 있을 경우 내용 높이보다 50포인트, 행에 헤더가 없을 경우 20포인트 이상 커야 한다고 가정합니다.

 

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

 

- 위의 예시는 아래의 예시를 다중 조건 연산자로 표현한 식입니다.

 

let contentHeight = 40
let hasHeader = true
let rowHeight: Int
if hasHeader {
rowHeight = contentHeight + 50
} else {
rowHeight = contentHeight + 20
}
// rowHeight is equal to 90

 

 

Nil-Coalescing Operator

 

a != nil ? a! : b

 

- 위의 식을 (a?? b)와 같이 축약할 수 있으며 아래와 같은 예시가 있습니다.

 

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

var colorNameToUse = userDefinedColorName ?? defaultColorName
// userDefinedColorName is nil, so colorNameToUse is set to the default of "red"

 

- 위의 식을 보면 userDefinedColorName의 값이 nil 값일 경우?? 뒤에 오는 defaultColorName 값이 colorNameToUse로 초기화되는 것을 확인할 수 있습니다. 아래는 nil 값이 아닐 경우의 예시입니다.

 

userDefinedColorName = "green"
colorNameToUse = userDefinedColorName ?? defaultColorName
// userDefinedColorName isn't nil, so colorNameToUse is set to "green"

 

 

Range Operators

- Closed Range Operator로 ( ... ) 가 존재하며 ( a ... b ) 일 경우 a에서 b까지의 범위를 나타내며 이때  a의 값이 b의 값 보다 작아야 합니다. 예를 들어, 모든 값을 사용할 범위를 반복할 때 유용하며 for-in 루프에서 사용할 수 있습니다.

 

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) 일 경우 a에서 b 바로 앞까지의 범위를 나타냅니다. 특히 배열과 같은 제로 기반 목록으로 작업할 때 유용합니다.

 

let names = ["홍길동", "김철수", "김명희", "김무"]
let count = names.count
for i in 0..<count {
print("Person \(i + 1) is called \(names[i])")
}
// Person 1 is called 홍길동
// Person 2 is called 김철수
// Person 3 is called 김명희
// Person 4 is called 김무

 

- One-Sided Range는 [index...], [... index]와 같은 형식으로 아래와 같은 예시이며 여기서 index는 배열에서의 순서를 의미합니다. 밑의 예시 중 앞의 예시는 2번째 위치에서 끝까지 나열하는 것이므로 김명희와 김무가 오는 것이며 뒤의 예시는 똑같이 2번째 위치에서부터 앞의 끝까지 나열하는 것이므로 홍길동 김철수 김명희 가 오게 됩니다. 

 

for name in names[2...] {
print(name)
}
// 김명희
// 김무

for name in names[...2] {
print(name)
}
// 홍길동
// 김철수
// 김명희

for name in names[..<2] {
print(name)
}
// 홍길동
// 김철수

 

 

Logical Operators

  • NOT  (! a)
  • AND  (a && b)
  • OR    (a || b)

- NOT 연산자 예시입니다.

 

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

 

- AND 연산자 예시입니다.

 

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

 

- OR 연산자 예시입니다.

 

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

 

- 논리 연산자들의 조합 예시입니다.

 

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

 

- 논리 연산자들의 조합에 명시적 괄호를 사용한 예시입니다. 명시적 괄호는 괄호를 넣음으로써 복잡한 조합을 읽기 쉽게 만들어주므로 복잡한 조합일 경우 사용하지 않았을 때보다 가독성 및 성능적으로 유리합니다.

 

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

 

 

내용은 https://docs.swift.org/swift-book/LanguageGuide/TheBasics.html를 보면서 작성하였고 원문으로 작성된 내용을 옮기다 보니 이상한 부분이 있을 수 있습니다. 자세한 내용은 위의 링크를 확인해주시기 바랍니다.

 

 

반응형
profile

소소한개발팁

@개발자 뱅

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!