์์ํ๋ฉฐ
swift ๊ณต๋ถ๋ฅผ ์์ํ์ง ์ดํ์ฐจ, ์์ผ๋ก ๋งค์ผ ๊ณต๋ถํด๋ณด์! ๊ทธ๋ผ ๋ฐ๋ก ๊ฐ์ฅ ๊ธฐ์ด๊ฐ๋๋ ์ฐ์ฐ์์ ๋ํด์ ๊ณต์๋ฌธ์๋ฅผ ์ ๋ฆฌํด๋ณด์. ์ฌ์ค ํ๋ฒ ์ฅ ํ์ผ๋ฉด ๋๋ ๊ฐ๋ ๋ค์ด๊ธด ํด์ ์ด๋ ๊ฒ ๋ฆฌ๋ทฐํ๋๊ฒ ์๊ฐ๋ญ๋น์ผ๊น? ๋ผ๋ ์๊ฐ์ด ๋ค๊ธฐ๋ ํ์ง๋ง, ๋์ค์ ์ํด ๊ธฐ์ด๋ถํฐ ์ฐจ๊ทผ์ฐจ๊ทผ ๋ฐ์๋ณด๊ธฐ๋ก ํ์. ํ์ด์ฌ์ ์ด๋ฐ ๊ณต์๋ฌธ์๋ฅผ ์ฝ์ง๋ ์๊ณ ์์ํ๋๋ฐ... ๋์์ด ๋๊ฒ์ง!! ์ง๋ฃจํด๋ ์ข๋ง ํ๋ด์.
Swift ๊ณต์ Documents (2) - Basic operators
Basic Operators (๊ธฐ์ด ์ฐ์ฐ์)
์ฐ์ฐ์๋ ๊ฐ์ ํ์ธ, ๋ณ๊ฒฝ, ๋๋ ๊ฒฐํฉํ๊ธฐ ํ๋๋ฐ ์ฌ์ฉํ๋ ํน์ ๊ธฐํธ์ด๋ค. + ๋ ๋ ์๋ฅผ ๋ํ๋ ๋ฐ ์ฌ์ฉํ๋ ์ฐ์ฐ์์ด๊ณ , && ๋ AND ๋ ผ๋ฆฌ ์ฐ์ฐ์ ์ญํ ์ ์ํํ๋ค.
swift๋ C์ธ์ด์ ์ฝ๋ฉ ์ค๋ฅ๋ฅผ ์ ๊ฑฐํ๊ธฐ ์ํด์ ๊ธฐ๋ฅ์ ํฅ์์ํจ ์ฐ์ฐ์๋ฅผ ์ง์ํ๋ค. ์๋ฅผ๋ค์ด (=) ์ฐ์ฐ์๋ ๊ฐ์ ๊ฐ์ ๋ฐํํ์ง ์๋๋ฐ ์ด๋ (==) ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ ๋ ๊ฐ์ด ์๋ชป ์ฌ์ฉ๋๋ ๊ฒ์ ๋ง์ ์ ์๋ค.
์ฐ์ ์ฐ์ฐ์ (_+, -, *, / , % ๋ฑ)์ ์ค๋ฒํ๋ก๋ฅผ ๊ฐ์งํ๊ณ ์ค๋ฅ๋ฅผ ๋ฐ์ํ์ง ์๊ธฐ ์ํด ํ์ฉ๋ ๊ฐ ๋ฒ์๋ณด๋ค ํฌ๊ฑฐ๋ ์์ ์ซ์๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ๋์์ค๋ค.
swift๋ C์์๋ ์ ๊ณตํ์ง ์๋ a...<b, a...b ์ ๊ฐ์ ๋ฒ์ ์ฐ์ฐ์๋ฅผ ์ ๊ณตํ๋ค. ์ด๋ฒ ๊ธ์์๋ swift์ ๊ธฐ์ด ์ฐ์ฐ์์ ๋ํด์ ์ค๋ช ํ ๊ฒ์ด๋ค.
Terminology (์ฉ์ด)
์ฐ์ฐ์๋ unary(๋จํญ), binary(์ดํญ) ๋๋ ternary (์ผํญ)์ด๋ค.
unary ์ฐ์ฐ์๋ ํ ๊ฐ์ ๋์์ด ์๋ ์ฐ์ฐ์์ด๋ค (์: -a).
Unary Prefix ์ฐ์ฐ์๋ ๋์ ๋ฐ๋ก ์์ ๋ํ๋๊ณ (!a) Unary Postfix์ฐ์ฐ์๋ ๋์ ๋ฐ๋ก ๋ค์ ๋ํ๋๋ค. (a!)
binary ์ฐ์ฐ์๋ ๋ ๊ฐ์ ๋์์ด ์๋ ์ฐ์ฐ์์ด๋ค. (a+b).
Ternary ์ฐ์ฐ์๋ ์ธ ๊ฐ์ ๋์์ด ์๋ ์ฐ์ฐ์์ด๋ค. swift์์๋ c์ธ์ด์ ๋ง์ฐฌ๊ฐ์ง๋ก ํ๋์ ์ผํญ ์ฐ์ฐ์๊ฐ ์กด์ฌํ๋ค.
a? b:c
๋ผ๊ณ ์ฐ์ด๋ ์กฐ๊ฑด ์ฐ์ฐ์ ๋ง์ด ์ ์ผํ Ternary ์ฐ์ฐ์์ด๋ค.
์ฐ์ฐ์์ ์ํฅ์ ๋ฐ๋ ๊ฒ์ ํผ์ฐ์ฐ์์ด๋ค. 1+2์์ +๋ ์ฐ์ฐ์์ด๊ณ , 1๊ณผ 2๋ ํผ์ฐ์ฐ์์ด๋ค. ๊ฒฐ๊ณผ๋ ํผ์ฐ์ฐ์์ ์ํด ์ํฅ์ ๋ฐ๋๋ค.
Assignment operator (ํ ๋น ์ฐ์ฐ์)
ํ ๋น ์ฐ์ฐ์ (=) ๋ ๊ฐ์ ์ด๊ธฐํ ํ๊ฑฐ๋ ์ ๋ฐ์ดํธํ ๋ ์ฌ์ฉํ๋ค.
let b = 10
var a = 5
a=b
print(a)
// 10
๋ง์ฝ ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ง ํํ์ธ ๊ฒฝ์ฐ ํด๋น ์์๋ฅผ ์์ ์ฝ๋์ ๊ฐ์ด ํ ๋ฒ์ ์ฌ๋ฌ ์์ ๋๋ ๋ณ์๋ก ๋ถํดํ ์ ์๋ค.
let (x, y) = (1, 2)
// x is equal to 1, and y is equal to 2
print(x)
// 1
C์ธ์ด์ ์ฐ์ฐ์์๋ ๋ฌ๋ฆฌ swift์ ์ฐ์ฐ์๋ ๊ฐ์ ๋ฐํํ์ง ์๋๋ค. ๊ทธ๋์ ์๋์ ๊ฐ์ ์์ ์ ํจํ์ง ์๋ค.
if x = y {
// This isn't valid, because x = y doesn't return a value.
}
์ด๋ ๊ฒ ๊ฐ์ ๋ฐํํ์ง ์๋ ๊ธฐ๋ฅ์, ์ฐ์ฐ์ == ๋ฑํธ์ ์ค์๋ก ์ฌ์ฉ๋๋ ๊ฒ์ ๋ฐฉ์งํ๋ค.
Arithmetic Operators (์ฐ์ ์ฐ์ฐ์)
swift๋ 4๊ฐ์ ํ์ค ์ฐ์ ์ฐ์ฐ์๋ฅผ ์ง์ํ๋ค.
- Addition (+)
- Subtraction (-)
- Multiplication (*)
- Division (/)
1 + 2 // equals 3
5 - 3 // equals 2
2 * 3 // equals 6
10.0 / 2.5 // equals 4.0
C, objective-C์ ์ฐ์ ์ฐ์ฐ์์๋ ๋ฌ๋ฆฌ swift์ฐ์ฐ์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ์ด ์ค๋ฒํ๋ก ๋๋ ๊ฒ์ ํ์ฉํ์ง ์๋๋ค. swift์์ ์ค๋ฒํ๋ก ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ฉด ์ค๋ฒํ๋ก๊ฐ ๋ฐ์ํ์ ๋ ์คํ์ ์ ์ดํ ์ ์๋๋ฐ ์ด๋ ์ถํ Advanced operator ๋จ์์์ ๊ณต๋ถํด๋ณผ ์ ์๋ค.
์ฐ์ ์ฐ์ฐ์๋ string์์๋ ์ ์ฉํ ์ ์๋ค.
"hello, " + "world" // equals "hello, world"
Remainder Operator (๋๋จธ์ง ์ฐ์ฐ์)
rimainder operator์ ๋๋จธ์ง ์ฐ์ฐ์๋ก a%b ์ ๊ฐ์ด ์ฌ์ฉํ ์ ์๋ค. a๋ฅผ b๋ก ๋๋์์ ๋์ ๋๋จธ์ง๋ฅผ ๊ฐ์ผ๋ก ๋ฐํํ๋ค. ๋๋จธ์ง๊ฐ ์ค๊ฒ๋๋ ์๋ฆฌ๋ [ a = (b*๊ณฑํด์ง ๊ฐ) + ๋๋จธ์ง ] ์ด๋ค. ์ฌ๊ธฐ์ ๊ณฑํด์ง ๊ฐ์ a๋ฅผ b๋ก ๋๋ ๋ชซ์ด ๋๋ค.
๋ง์ฝ a = -9, b = 4๋ผ๋ฉด -9 = (4*2) + (-1) ์ด ๋๊ธฐ์, ๋๋จธ์ง๋ -1 ์ด ๋๋ค. ๊ณ์ฐ์ b์ ๋ถํธ๋ ๋ฌด์๋๊ธฐ ๋๋ฌธ์ a%b๋ a%-b์ ๊ฐ์ ๊ฐ์ ๊ฒ์ด๋ค.
print(-9%4) // -1
Unary Minus Operator (๋จํญ ๋ง์ด๋์ค ์ฐ์ฐ์)
์ซ์ ์์ ๋ถ์ด ๋ฐ๋ก ํด๋น ์ซ์์ -1 ์ ๊ณฑํด์ค๋ค๊ณ ์๊ฐํ์.
let three = 3
let minusThree = -three // minusThree equals -3
let plusThree = -minusThree // plusThree equals 3, or "minus minus three"
Unary Plus Operator (๋จํญ ํ๋ฌ์ค ์ฐ์ฐ์)
์ซ์ ์์ ๋ถ์ด ํด๋น ์ซ์์ +1์ ๊ณฑํด์ค๋ค๊ณ ์๊ฐํ์.
let minusSix = -6
let alsoMinusSix = +minusSix // alsoMinusSix equals -6
Compound Assignment Operators (๋ณตํฉ ํ ๋น ์ฐ์ฐ์)
C์ธ์ด๋ ๋ง์ฐฌ๊ฐ์ง๋ก Swift์์๋ ๋ณตํฉํ ๋น์ฐ์ฐ์๋ฅผ ์ ๊ณตํ๋ค. += ์ ๊ฐ์ ์ฐ์ฐ์๊ฐ ๋ณตํฉ ํ ๋น ์ฐ์ฐ์์ด๋ค.
var a = 1
a += 2
// a is now equal to 3
Comparison Operators (๋น๊ต ์ฐ์ฐ์)
==, !=, >, <, >=, <= ์ ๊ฐ์ ๋น๊ต ์ฐ์ฐ์๊ฐ ์กด์ฌํ๋ค. Swift์์๋ ===, !==๋ ์๋๋ฐ ๋ ๊ฐ์ฒด ์ฐธ์กฐ๊ฐ ๋ชจ๋ ๋์ผํ ๊ฐ์ฒด ์ธ์คํด์ค๋ฅผ ์ฐธ์กฐํ๋์ง๋ฅผ ์๋ ค์ค๋ค. ์ด์จ๋ , ๋น๊ต ์ฐ์ฐ์๋ Bool ๊ฐ์ ๋ฐํํ๋ค.
- Equal to (a == b)
- Not equal to (a != b)
- Greater than (a > b)
- Less than (a < b)
- Greater than or equal to (a >= b)
- Less than or equal to (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
๊ทธ๋ ๊ธฐ ๋๋ฌธ์ if๋ฌธ๊ณผ ๊ฐ์ ์กฐ๊ฑด๋ฌธ์์ ์ฌ์ฉํ ์ ์๋ค.
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, zebra) < (2, apple) ์์ ์ผ์ชฝ๋ถํฐ ๋ณด๊ธฐ ๋๋ฌธ์ 1, 2 ๋ฅผ ๋น๊ตํ๊ฒ ๋๋๋ฐ ์ฌ๊ธฐ์ 2๊ฐ ๋ ํฌ๊ธฐ ๋๋ฌธ์ ๋ฐ๋ก true๊ฐ ๋ฐํ๋๋ค๋ ๊ฒ์ด๋ค. ๋ง์ฝ ๋์ผํ๋ฉด ์ค๋ฅธ์ชฝ ์์๋ฅผ ๊ฐ์ง๊ณ ๋น๊ตํ๊ฒ ๋๋ค.
("blue", -1) < ("purple", 1) // OK, evaluates to true
("blue", false) < ("purple", true) // Error because < can't compare Boolean values
์ ์ฝ๋์์, Bool๊ฐ์ ๋์ ๋น๊ต๊ฐ ์๋๊ธฐ ๋๋ฌธ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ฒ ๋๋ค.
Ternary conditional Operator (์ผํญ ์กฐ๊ฑด ์ฐ์ฐ์)
์ผํญ ์กฐ๊ฑด ์ฐ์ฐ์๋ ์ธ ๋ถ๋ถ์ผ๋ก ๋ ํน์ ์ฐ์ฐ์๋ก ์๋์ ๊ฐ์ ํํ๋ฅผ ์ทจํ๋ค.
? answer 1 : answer 2
์ง๋ฌธ์ด ์ฐธ์ธ์ง ๊ฑฐ์ง์ธ์ง์ ๋ฐ๋ผ ๋ ๊ฐ์ง ์ค์ ํ๋๋ฅผ ํ๊ฐํ๋ค. ์ง๋ฌธ์ด ์ฐธ์ด๋ฉด answer1์ ํ๊ฐํ์ฌ ๊ฐ์ ๋ฐํํ๊ณ , ๊ทธ๋ ์ง ์์ผ๋ฉด (์ง๋ฌธ์ด ๊ฑฐ์ง์ด๋ฉด) answer2๋ฅผ ํ๊ฐํ์ฌ ๊ฐ์ ๋ฐํํ๋ค.
if question {
answer1
} else {
answer2
}
์์ if๋ฌธ์ ์ผํญ ์กฐ๊ฑด ์ฐ์ฐ์๋ก ํํํ ์์๊ฐ ์๋์ ์๋ค.
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
hasHeader? 50:20์ด๋ผ๋ ์ฐ์ฐ์ ์ํํ๋ฉด ๋๋๋ฐ ์ด๋ hasHeader๊ฐ true์ด๋ฏ๋ก 50์ด ๋ฐํ๋์ด rowHeight์ 50์ด ์ ์ฅ๋๋ค.
Nil-Coalescing Operator (?? : ์ต์ ๋ ๋ถ์ ์ฐ์ฐ์)
nil coalescing operator์ a??b ์ ๊ฐ์ ์ฐ์ฐ์๋ก ์ต์ ๋์ ๋ถ์ํ ๋ ์ฌ์ฉํ๋ค. ์ต์ ๋ ๋ณ์ a๊ฐ ์๊ณ a??b๊ฐ ์๋ค๋ฉด, ๋ง์ฝ a๊ฐ nil๊ฐ์ด๋ฉด b๋ฅผ ๋ฐํํ๊ณ , ์๋ ๊ฒฝ์ฐ ๊ทธ๋๋ก ๊ทธ๋ฅ a๋ฅผ ๋ฐํํ๋ค. ์ด๋ ๋ฐ๋์ a๋ ์ต์ ๋ ํ์ ์ด์ด์ผ ํ๋ค.
ํ์ด์ ์ฐ๋ฉด ๋ค์๊ณผ ๊ฐ๊ณ , ์ด๋ฅผ ?? ํ์ฉํ ์์๋ ๋ฃ์ด ๋ณด์๋ค.
// ํ์ด์ฐ๋ ๊ฒฝ์ฐ
a != nil ? 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"
Range Operator (๋ฒ์ ์ฐ์ฐ์)
swift์๋ ์๋ ๊ฐ ๋ฒ์๋ฅผ ํํํ๊ธฐ ์ํ ์ฌ๋ฌ ๋ฒ์ ์ฐ์ฐ์๊ฐ ํฌํจ๋์ด ์๋ค.
Closed Range Operator (...)
closed range operator์ a...b์ ๊ฐ์ด ์ฌ์ฉ๋๋ ๊ฒ์ผ๋ก a์ b ์ฌ์ด์ ๊ฐ์ ํฌํจํ๋๋ฐ ์ด๋ a์ ๊ฐ์ด b๋ณด๋ค ํฌ๋ฉด ์๋๋ค. ์ด๋ฌํ ์ฐ์ฐ์๋ for-in ๋ฃจํ์ ๊ฐ์ด ๋ชจ๋ ๊ฐ์ ์ฌ์ฉํ ๋ ์ ์ฉํ๋ค.
for-in ๊ตฌ๋ฌธ์ ์ฌ์ฉํ์ฌ ํด๋น ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ๋ฉด ์๋ ์ฝ๋์ ๊ฐ๋ค. (a์ด์ b์ดํ ๋ผ๊ณ ์๊ฐํ๋ฉด ์ข๋ค. a,b๊ฐ ๋ชจ๋ ํฌํจ)
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 (..<)
half open range operator์ a..<b ์ ๊ฐ์ด ์ฌ์ฉ๋๋ค. a์ b์ฌ์ด์ ๊ฐ์ ๋ํ๋ด๋๋ฐ b๋ ํฌํจํ์ง ์๋๋ค. (a์ด์ b๋ฏธ๋ง)
์ด ์ฐ์ฐ์๋ 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...b] )
ํ ๋ฐฉํฅ์ผ๋ก๋ง ์ปค์ง๊ฑฐ๋ ์์์ง๋ ๊ฐ๋
์ผ๋ก ์ฌ์ฉํ๋ค.
์๋ ์ฝ๋๋ฅผ ๋ณด๋ฉด names ๋ฐฐ์ด์ ๋ค์ด์๋ 2๋ฒ์งธ ์ธ๋ฑ์ค ๊ฐ๋ถํฐ ์ถ๋ ฅํ๊ฑฐ๋, 2๋ฒ์งธ ์ธ๋ฑ์ค๊น์ง ์ถ๋ ฅํ์๋ค. (swift์์๋ ์ธ๋ฑ์ค ๋ฐฐ์ด์ 0๋ถํฐ ์์)
for name in names[2...] {
print(name)
}
// Brian
// Jack
for name in names[...2] {
print(name)
}
// Anna
// Alex
// Brian
half-open range operator๋ ํจ๊ป ์ฌ์ฉ ๊ฐ๋ฅํ๋ค. ์๋์ ๊ฐ์ด ์ฌ์ฉํ ์ ์๋ค. (2๋ฒ์งธ ์ธ๋ฑ์ค ๋ฏธ๋ง ๊น์ง ์ถ๋ ฅ๋๋ค.)
for name in names[..<2] {
print(name)
}
// Anna
// Alex
์๋ ์ฝ๋์ ๊ฐ์ด .contains๋ฅผ ํ์ฉํ์ฌ ํด๋น ๋ฒ์์์ ๋ณ์๊ฐ ์กด์ฌํ๋์ง ํ์ธํ ์ ์๋ค.
let range = ...5
range.contains(7) // false
range.contains(4) // true
range.contains(-1) // true
Logical Operators (๋ ผ๋ฆฌ ์ฐ์ฐ์)
๋ ผ๋ฆฌ ์ฐ์ฐ์๋ boolean ๋ ผ๋ฆฌ ๊ฐ์ true๋ false๋ก ๋ฐ๊ถ์ค๋ค. swift๋ ์ค๋ก์ง ์๋์ ์ธ ๊ฐ์ ๋ ผ๋ฆฌ ์ฐ์ฐ์๋ง ์ ๊ณตํ๋ค.
- Logical NOT (!a)
- Logical AND (a && b)
- Logical OR (a || b)
Logical NOT operator
!a ๋ก ์ฐ์ด๊ณ , True๋ flase๋ก, false๋ true๋ก ๋ฐ๊พธ์ด์ค๋ค. ๋ณ์ ์์ ์ฐ๋ฉด ๋๋ค. (!a)
let allowedEntry = false
if !allowedEntry {
print("ACCESS DENIED")
}
// Prints "ACCESS DENIED"
Logical AND operator
a&&b ๋ก ์ฐ์ด๋ฉฐ, a,b ๋ชจ๋ true์ผ๋๋ง true๋ฅผ ๋ฐํํ๋ค. ํ๋๋ผ๋ false์ธ ๊ฒฝ์ฐ false๋ฅผ ๋ฐํํ๋ค.
let enteredDoorCode = true
let passedRetinaScan = false
if enteredDoorCode && passedRetinaScan {
print("Welcome!")
} else {
print("ACCESS DENIED")
}
// Prints "ACCESS DENIED"
Logical OR operator
a || b ์ ๊ฐ์ด ์ฐ์ด๋ฉฐ, ๋ ์ค ํ๋๋ผ๋ True ๋ฉด True๋ฅผ ๋ฐํํ๋ค. ๋ง์ฝ a ๊ฐ true๋ฉด b๋ ํ์ธ๋ ํ์ง ์๊ณ True๋ฅผ ๋ฐํํ๋ค๋ ๊ฒ์ด๋ค.
let hasDoorKey = false
let knowsOverridePassword = true
if hasDoorKey || knowsOverridePassword {
print("Welcome!")
} else {
print("ACCESS DENIED")
}
// Prints "Welcome!"
Combining Logical Operators
๊ฐ๋ฐ์๋ ์ด๋ฐ ์ฌ๋ฌ ์ฐ์ฐ์๋ฅผ ์กฐํฉํด์ ํจ๊ป ๋ณํฉํ์ฌ ์ฌ์ฉํ ์ ์๋ค.
if enteredDoorCode && passedRetinaScan || hasDoorKey || knowsOverridePassword {
print("Welcome!")
} else {
print("ACCESS DENIED")
}
// Prints "Welcome!"
์ฌ๋ฌ && ๊ณผ || ๋ฅผ ์ฌ์ฉํด์ ๋ณตํฉ ํํ์์ ์์ฑํ๋ค. ์ฌ๋ฌ ๊ฐ๋ก ์์ฑํด๋ ๋ ผ๋ฆฌ ์ฐ์ฐ์๋ ๋๊ฐ ์ฉ ๋น๊ตํ๊ธฐ ๋๋ฌธ์ ํฌ๊ฒ 3๊ฐ์ ์์ผ๋ก ์ด๋ฃจ์ด์ ธ์๋ค๊ณ ๋ณผ ์ ์๋ค. enteredDoorCode && passedRetinaScan์ ๊ฐ์ false๊ฐ ๋์ค๊ณ false || hasDoorKey๋ false๊ฐ ๋์ค๊ฒ ๋๋๋ฐ ๊ฒฐ๊ตญ false || knowOverridePassword๋ฅผ ์ฐ์ฐํ๊ฒ ๋๋ฉด true๊ฐ ๋์์ Welcome! ์ด ์ถ๋ ฅ๋๊ฒ ๋๋ค. ์ฆ, swift๋ ์ผ์ชฝ์ ์๋ ํ์ ํํ์์ ๋จผ์ ์ฐ์ฐํ๋ค.
Explicit Parentheses (๋ช ์์ ๊ดํธ)
๋ช ์์ ๊ดํธ๋ ๋ณต์กํ ์์ ๋ณด๊ธฐ ์ฝ๊ฒ ํ๊ธฐ ์ํด์ ์ฌ์ฉ๋๋ค. ์ ์ฝ๋๋ฅผ ๊ดํธ๋ฅผ ๋ฃ์ด์ ํํํ๋ฉด ์๋์ ๊ฐ๋ค.
if (enteredDoorCode && passedRetinaScan) || hasDoorKey || knowsOverridePassword {
print("Welcome!")
} else {
print("ACCESS DENIED")
}
// Prints "Welcome!"
๊ดํธ๋ ์ฒ์ ๋ ๊ฐ์ด ์ ์ฒด ๋ ผ๋ฆฌ์์ ๊ฐ์ฅ ๋จผ์ ์ํํด์ผ๋ ์ฐ์ฐ์ด๋ผ๊ณ ๋ช ํํ๊ฒ ํ์ํด์ค๋ค. ๋ ์๋ค์ด ๋ ๋ช ํํ๊ฒ ์ดํดํ ์ ์์ ๊ฒ์ด๋ค. ๊ฐ๊ฒฐํจ ๋ณด๋ค๋ ๊ฐ๋ ์ฑ์ ์ด์ ์ ๋ ์ฝ๋๋ค. ์๋๋ฅผ ๋ช ํํ๊ฒ ํ๊ณ ์ถ๋ค๋ฉด ๊ดํธ๋ฅผ ์ ์ ํ ์ฌ์ฉํ์.
๋ง๋ฌด๋ฆฌํ๋ฉฐ
๊ธฐ์ด์ ์ธ ์ง์์ด๊ณ , ๋ค๋ฅธ ์ธ์ด์ ๋น์ทํ ์ ์ด ๋ง์ ์์ง๊น์ง๋ ๊ณต์ ๋ฌธ์์ ๋ฆฌํ๋ ๊ฒ์ด ์๊ฐ๋ญ๋น๋ ์๋๊น? ์๊ฐ์ด ๋ค๊ธฐ๋ ํ๋ค. ํ์ง๋ง, ์ถํ์ ์ฝ๋ฉ์ ํ๋ค๋ณด๋ฉด ๊ธฐ์ด์ ์ธ ๋ถ๋ถ์์ '์ด๊ฒ ์ ์ค๋ฅ๊ฐ๋๋๊ฑฐ์ผ ์ ๋ง!!' ํ๊ณ ์ง์ฆ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ด ๋ฐ์ํ๊ฒ ๋๊ธฐ ๋๋ฌธ์ ์ด๋ ๊ฒ ํ๋ฉด ๋์์ด ํ์คํ!!!! ๋ ๊ฒ์ด๋ผ๊ณ ๋ฏฟ๊ณ ์๋ค. ์์ง ๊ธฐ์ด ๋จ์์ด๋ผ ๊ทธ๋ฐ ๊ฒ์ผ ๊ฒ ๊ฐ๊ณ ๋ค์ ์ด๋ ค์ด ๋ถ๋ถ์ ๊ธฐ์ด์ ๋ฆฌ๋ ์ ๋ง ๋์์ด ๋ ๊ฒ ๊ฐ๋ค. ๋๊น์ง ๊ฐ๋ณด์์์!!!!