์๋ ๋์ ๋ ธ์ ์ผ๋ก ์ ๋ฆฌํ๋ ๊ธ์ ํฐ์คํ ๋ฆฌ๋ก ์ฎ๊ฒผ์ต๋๋ค. ๐๊ผผ๊ผผํ ์ฌ์์จ์ ์ค์ํํธ: ๋ฌธ๋ฒํธ ๊ณผ Swift ๋ฌธ์๋ฅผ ๋ณด๋ฉด์ ๋ฐ๋ก ์ ๋ฆฌํ์ฌ ๊ณต๋ถํ ๋ด์ฉ์ด์์. ์ด๋ฒ์ Notion2Tistory ๋ฅผ ์ฌ์ฉํด๋ดค๋๋ฐ, ์ฝ๋๋ธ๋ญ์ ๋์ด์ฐ๊ธฐ๊ฐ ์ฌ๋ผ์ง๊ณ ์ด๋ฏธ์ง๊ฐ ๋ค ๊นจ์ ธ์ html ์ฝ๋๋ฅผ ๋ณด๋ฉด์ ์์ ํด์ผ ๋๋๋ผ๊ตฌ์. ๋ง์ฝ ๋ ธ์ ์์ ๋งํฌ๋ค์ด๋ง ๋ค๋ฃจ์๋ ๊ฒฝ์ฐ(e.g.Table of Contents, Heading, etc) ๋ฐ๋ก ํฐ์คํ ๋ฆฌ๋ก ๊ธ์ ์ฌ๋ฆฌ๊ธฐ ์ข์์. ์ถ์ฒ๋๋ฆฝ๋๋ค.
๋ชฉ์ฐจ
0. ์์ํ๋ฉฐ
ํ๋ก๊ทธ๋๋ฐ ๊ณผ์ ์์ ์์ฑํ๋ ์์ค์ฝ๋ : ๊ตฌ๋ฌธ(Statement)
๋จ์ ๊ตฌ๋ฌธ
์, ๊ฐ ํํ, ๊ฐ์ข ๊ฐ์ฒด์ ์ ์ธ, ์ ์ ๋ฑ์ ์ฌ์ฉ๋๋ ๊ตฌ๋ฌธ.
์ฐ์ฐ์ฒ๋ฆฌ ๋ฑ๋ ๋ชจ๋ ๋จ์ ๊ตฌ๋ฌธ์ ์ํจ.
//๋ณ์ ๋๋ ์์ ์ ์ธ let number = 4 var cat = """ ์ฐ๋ฆฌ ์ง ๊ณ ์์ด ์ด๋ฆ์ ๊น์ฐ์ ๋๋ค. ๋งค์ฐ ๊ท์ฌ์์. """
ํ๋ฆ์ ์ด ๊ตฌ๋ฌธ
ํ๋ก๊ทธ๋จ ์คํ ๊ณผ์ ์์ ์คํ ํ๋ฆ์ ๋ฅ๋์ ์ผ๋ก ์ ์ดํ๊ธฐ ์ํ ๋ชฉ์ .
์์ฐจ์ ์ผ๋ก ์คํ๋ ์ผ๋ถ ์คํ๊ณผ์ ์ ๊ฑด๋๋ฐ๊ฑฐ๋ ๋๋์์ค๋๋ก, ๋๋ ๋ฐ๋ณต์ ์ผ๋ก ์คํ๋๋๋ก ํ๋ฆ์ ์ ์ด.
ํ๋ฆ์ ์ด ๊ตฌ๋ฌธ์์๋ { ์ฝ๋ ๋ธ๋ก }์ ์ง์ ํด์ผํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
1. ๋ฐ๋ณต๋ฌธ (Loop)
๋ฃจํ ํ์๊ฐ ์ ํด์ ธ ์๋์ง๋ฅผ ๊ธฐ์ค์ผ๋ก for, while
for : ํ์์ ์ํ ๋ฐ๋ณต
while : ์กฐ๊ฑด์ ์ํ ๋ฐ๋ณต
for~in
for <๋ฃจํ ์์> in <์ํ ๋์> { <์คํํ ๊ตฌ๋ฌธ> // ์ฝ๋๋ธ๋ก ์ฌ์ด์ ์์ฑ๋์ด์ผ ํจ }
for <๋ฃจํ ์์> in <์ํ ๋์> {
<์คํํ ๊ตฌ๋ฌธ>
// ์ฝ๋๋ธ๋ก ์ฌ์ด์ ์์ฑ๋์ด์ผ ํจ
}
์ํ๋์์ผ๋ก ์ฌ์ฉํ ์ ์๋ ๋ฐ์ดํฐ ํ์
- ๋ฐฐ์ด
Array
- ๋์
๋๋ฆฌ
Dictionary
- ์งํฉ
Set
= Collective Types = Container Type
- ๋ฒ์ ๋ฐ์ดํฐ (๋ฒ์ ์ฐ์ฐ์ '...' ์ ์ํด ๊ท์น์ ์ธ ๊ฐ๊ฒฉ์ผ๋ก ๋์ด๋ ์ ์๋ค ๋ชจ์)
- ๋ฌธ์์ด
String
์ํ๋์์ ์ฃผ๋ก ์๋ฒ์ ๊ฐ์ง๋ ์ง๋จ ์๋ฃํ์ด๋ ๋ฒ์๋ฅผ ๊ฐ์ง๋ ๋ฐ์ดํฐ ๋ฑ์ด ์ฌ์ฉ๋จ.
๐ ๋ฌธ์์ด ์ํ ๋ฐฉ๋ฒ
String
์ ๋จ์ผ ๊ฐ์ฒด๋ก ์ฌ์ฉ๋๋, ๊ทธ ์์ Character
ํ์
์ ๊ฐ๋ณ ๋ฌธ์๋ค์ด ๋ชจ์ฌ ์ด๋ฃจ์ด์ง ๊ฐ์ฒด
String
ํ์
์์ฒด๋ ์ํ์ฒ๋ฆฌ๋ฅผ ์ง์ํ์ง ์์ผ๋ฏ๋ก, characters
์์ฑ์ ์ฌ์ฉํด์ผํจ.
var lang = "swift"
for char in lang.characters { print("\char") }
[์คํ๊ฒฐ๊ณผ] s w i f t
๐ค ๋ฃจํ ์์์ ์๋ต _
์ํ๋์ ์์ฒด๋ณด๋ค ์ํ๋์์ ํฌ๊ธฐ๋งํผ ๋ฐ๋ณตํ๋ ๊ฒ์ด ๋ชฉ์ ์ผ ๋, ์ธ๋๋ฐ _
๋ฅผ ์ฌ์ฉํ์ฌ ๋ฃจํ์์๋ฅผ ์๋ตํ ์ ์์.
let size = 5
let padChar = "0"
var keyword = "6"
for _ in 1...size {
keyword = padChar + keyword
}
print("\(keyword)") // ์คํ๊ฒฐ๊ณผ 000006
๐ for~in ๊ตฌ๋ฌธ์ ์ค์ฒฉ
๋ค์ค ๋ฃจํ ๋๋ ๋ฉํฐ๋ฃจํ
while
์กฐ๊ฑด์ ๋ง์กฑํ๋ ๋์ ์คํ.
while <์กฐ๊ฑด์> { <์คํํ ๊ตฌ๋ฌธ> }
์กฐ๊ฑด์์ ๋ฐ๋์ ์ฐธ์ด๋ ๊ฑฐ์ง์ ๊ฒฐ๊ณผ๊ฐ์ผ๋ก ๋ฐํํด์ผ ํจ.
๐ ๋ฌดํ ๋ฃจํ
while true { ... } /* ๋ชจ๋ฐ์ผ ์ฑ ๋ฑ ์ฌ์ฉ์ ์ก์
์ ๊ธฐ๋ค๋ฆฌ๋ ๋๊ธฐ ์ํ๋ฅผ ์ ์งํด์ผ๋๋ ๊ฒฝ์ฐ, ์ด๋ฒคํธ ๋ฃจํ(=๋ฌดํ๋ฃจํ)๋ฅผ ๋ง๋ค์ด ์คํํจ. Event-Driven Programming : ์์๋๋ก ์ํ๋ ํ ํ๋ก๊ทธ๋จ์ด ์ข
๋ฃ๋๋ ๊ธฐ์กด ๋ฐฉ์์ ํ๋ก๊ทธ๋๋ฐ์ด ์๋ ํน์ ์ํฉ์์ ์คํํ ๊ตฌ๋ฌธ์ ์์ฑํด๋๊ณ ์ด๋ฅผ ์ฌ์ฉ์ ์ด๋ฒคํธ์ ์ฐ๊ฒฐํ์ฌ ํ๋ก๊ทธ๋๋ฐํ๋ ๋ฐฉ์. */
repeat~while
ํ ์ธ์ด์ do-while ๊ตฌ๋ฌธ์ ํด๋น.
์ค์ํํธ 2.0 ๋ฒ์ ๋ถํฐ ์๋ก ์ถ๊ฐ๋์์.
๊ธฐ์กด์ ์ฌ์ฉ๋๋ do~while ๊ตฌ๋ฌธ์ด 2.0 ๋ฒ์ ์์ ์์ธ์ฒ๋ฆฌ ๊ตฌ๋ฌธ์ผ๋ก ๋ณ๊ฒฝ๋๊ณ
๊ทธ ๋์ repeat~while ๊ตฌ๋ฌธ์ด ์ ๊ณต๋๊ธฐ ์์ํจ.
repeat { <์คํํ ๊ตฌ๋ฌธ> } while <์กฐ๊ฑด์>
2. ์กฐ๊ฑด๋ฌธ
๋ถ๊ธฐ๋ฌธ (Branch Statements)
ํ๋ก๊ทธ๋จ์์ ํ๋ ๋๋ ๊ทธ ์ด์์ ์กฐ๊ฑด๊ฐ์ ๋ฐ๋ผ ํน์ ๊ตฌ๋ฌธ์ ์คํํ๋๋ก ํ๋ก๊ทธ๋จ ํ๋ฆ์ ๋ถ๊ธฐํ๋ ์ญํ .
if
if ๋ค์์ ์กฐ๊ฑด์์ ๋ฐ๋์ Bool ํ์ ์ ์ฐธ, ๊ฑฐ์ง์ ํ๋จํ ์ ์๋ ํํ์ด์ด์ผ.
๊ณผ๊ฑฐ C ์คํ์ผ์์ ์ฐธ, ๊ฑฐ์ง ๋์ ์ ์ซ์ 0, 1์ ์ฌ์ฉํ ์ ์์์ง๋ง Swift์์๋ ํ์ฉํ์ง ์์.
(์๊ดํธ)๋ฅผ ์ด์ฉํ์ฌ ์กฐ๊ฑด์์ ๊ฐ์ธ์ฃผ์ด๋ ๋์ง๋ง ํ์์ฌํญ์ ์๋.
// if ๊ตฌ๋ฌธ
if <์กฐ๊ฑด์> { <์คํํ ๊ตฌ๋ฌธ> }
// if~else
if <์กฐ๊ฑด์> { <์กฐ๊ฑด์์ด ์ฐธ์ผ ๋ ์คํํ ๊ตฌ๋ฌธ> }
else { <์กฐ๊ฑด์์ด ๊ฑฐ์ง์ผ ๋ ์คํํ ๊ตฌ๋ฌธ> }
// if~else if
if <์กฐ๊ฑด์ 1> { <์กฐ๊ฑด์ 1๊ฐ ์ฐธ์ผ ๋ ์คํํ ๊ตฌ๋ฌธ> }
else if <์กฐ๊ฑด์ 2> { <์กฐ๊ฑด์ 2๊ฐ ์ฐธ์ผ ๋ ์คํํ ๊ตฌ๋ฌธ> }
else { <์ ์กฐ๊ฑด์ ๋ชจ๋ ๋ง์กฑํ์ง ์์์ ๋ ์คํํ ๊ตฌ๋ฌธ> }
guard
if๋ฌธ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์ฃผ์ด์ง ํํ์์ ๊ฒฐ๊ณผ๊ฐ ์ฐธ, ๊ฑฐ์ง์ด๋์ ๋ฐ๋ผ ๊ตฌ๋ฌธ์ ์คํ ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ์ง๋ ๋ฐฉ์.
๋จ guard
๊ตฌ๋ฌธ์ else
๋ธ๋ก์ด ํ์. ๋ํ ์ฐธ์ผ ๋ ์คํ๋๋ ๋ธ๋ก์ด ์๋ค.
guard <์กฐ๊ฑด์ ๋๋ ํํ์> else { <์กฐ๊ฑด์ ๋๋ ํํ์ ๊ฒฐ๊ณผ๊ฐ false์ผ ๋ ์คํ๋ ์ฝ๋> }
ํ์ ์ฝ๋๋ค์ด ์คํ๋๊ธฐ ์ ํน์ ์กฐ๊ฑด์ ๋ง์กฑํ๋์ง ํ์ธํ๋ ์ฉ๋.
ํน์ ์กฐ๊ฑด์ ๋ง์กฑํ์ง ์์ ์ฑ ํ์์ฝ๋๋ฅผ ์คํํ๋ฉด ์ฌ๊ฐํ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ์ ์ ์ฒด๊ตฌ๋ฌธ์ ์กฐ๊ธฐ์ข ๋ฃ(Early Exit) ํ๊ธฐ ์ํ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ๋จ.
๋๋ฌธ์ guard
๊ตฌ๋ฌธ์ else
๋ธ๋ก์์๋ ์ดํ์ ์ฝ๋์งํ์ ๋ง์์ฃผ๋ ๊ตฌ๋ฌธ์ด ๋ฐ๋์ ํฌํจ๋์ด์ผ. (e.g. return
, break
, continue
, throw
, ๋๋ ๋ฐํ๊ฐ์ด ์๋ ํจ์๋ ๋ฉ์๋๋ฅผ ํธ์ถํ ์ ์๋ค. fatalError(_:file:line:)
// Divide by Zero ์ค๋ฅ๋ฅผ ํผํ๊ธฐ ์ํด guard ๊ตฌ๋ฌธ์ ์ด์ฉํ ํจ์ ์ ์ธ
func divide(base: Int) {
guard base != 0
else {
print("์ฐ์ฐํ ์ ์์ต๋๋ค.")
return
}
let result = 100 / base
print(result)
}
guard
๊ตฌ๋ฌธ์ ๋ณธ๋ ์คํ ํ๋ฆ์ ์ข
๋ฃํ๊ธฐ ์ํ ๋ชฉ์ : ์ฝ๋๋ฅผ ์ค์ฒฉํด์ ์ฌ์ฉํ์ง ์์๋ ๋๋ค๋ ์ฅ์ ์ด ์์.
→ ์ฆ guard
๊ตฌ๋ฌธ์ ๋ง์ด ์ฌ์ฉํด๋ ์ฝ๋์ ๊น์ด๊ฐ ๊น์ด์ง์ง ์์.
func greet(person: [String: String]) {
guard let name = person["name"]
else {
return
}
print("Hello \(name)!")
guard let location = person["location"]
else {
print("I hope the weather is nice near you.")
return
}
print("I hope the weather is nice in \(location).")
}
greet(person: ["name": "John"])
// Prints "Hello John!"
// Prints "I hope the weather is nice near you."
greet(person: ["name": "Jane", "location": "Cupertino"])
// Prints "Hello Jane!"
// Prints "I hope the weather is nice in Cupertino."
#available
OS ๋ฒ์ ๋ณ๋ก ๊ตฌ๋ฌธ์ ๋๋์ด ์์ฑํด์ผ ํ ๋ ์ฌ์ฉ.
e.g. ํน์ API (์ ํ ๊ฐ๋ฐ์์ฉ API ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํด์ผ)
Swift 2 ๋ฒ์ ๋ถํฐ ์ง์(built-in support)ํ๊ธฐ ์์ํ ๊ตฌ๋ฌธ.
์ด์ ์๋ OS ๋ฒ์ ์ ์ถ์ถํ๋ API๋ฅผ ์ง์ ํธ์ถํ์ฌ, OS ๋ฒ์ ์ ๋ํ ๊ฐ์ ์ป๊ณ ์กฐ๊ฑด๋ฌธ์์ ๋น๊ต์ฒ๋ฆฌํ๋ ๋ฐฉ์์ ์ผ์ด์ผ.
//Swift 2 ์ด์ ๋ฒ์ ๊น์ง์ ๋ฐฉ์
import UIKit
if(UIDevice.current().systemVersion.hasPrefix("9")) { }
else if(UIDevice.current().systemVersion.hasPrefix("8")) { }
else { }
#available
๊ตฌ๋ฌธ์ ์ฌ์ฉํ์ฌ ๋ ๊ฐ๊ฒฐํ๊ฒ ๊ตฌ๋ถ์ด ๊ฐ๋ฅ
if #available( <ํ๋ซํผ์ด๋ฆ ๋ฒ์ >, <...>, <*> ){ <ํด๋น๋ฒ์ ์์ ์ฌ์ฉํ ์ ์๋ API ๊ตฌ๋ฌธ> }
else { <API๋ฅผ ์ฌ์ฉํ ์ ์๋ ํ๊ฒฝ์ ๋ํ ์ฒ๋ฆฌ> }
ํธ์ถ์ฐ์ฐ์( ) ๋ฅผ ํตํด ํ๋ซํผ ์ด๋ฆ๊ณผ ๋ฒ์ ๋ฑ ์ธ์๊ฐ์ ์ ๋ ฅํ ์ ์์.
ํ๋ซํผ ์ด๋ฆ๊ณผ ๋ฒ์ ์ฌ์ด๋ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ.
OSX 10.10
์ธ์๊ฐ์ ๊ฐ๋ณ์ธ์๋ก ์ ์๋์ด ์์ผ๋ฏ๋ก ์ ๋ ฅ๊ฐฏ์์ ์ ํ์ด ์์.
์ผํ๋ก๋ง ๊ตฌ๋ถํ์ฌ ํ๋ซํผ ์ด๋ฆ๊ณผ OS ๋ฒ์ ์ ๋์ดํ๊ธฐ๋ง ํ๋ฉด ๋จ.
ํ๋ซํผ๊ณผ ๋ฒ์ ์ ์์๋ก ์ธ์๋๋ฏ๋ก ๋ฌธ์์ด ์ฒ๋ฆฌ๋ฅผ ์ํ ๋ฐ์ดํ๋ ํ์์์.
๋์ด์ด ๋๋๋ฉด ๋ง์ง๋ง์ *
๋ก ๋ง๊ฐํ์ฌ ์ธ์๊ฐ ์ธ๋ ฅ์ด ๋ชจ๋ ๋๋ฌ์์ ์ ์ธ
if #available(iOS 9, OSX 10.11, watchOS 1, *) { }
else { // API๋ฅผ ์ฌ์ฉํ์ง ๋ชปํ์ ๋ ์คํจ ์ฒ๋ฆฌ }
๐ค #available ๊ตฌ๋ฌธ์ ์ฌ์ฉํ ํ๋ซํผ
- ์์ดํฐ, ์์ดํจ๋ ๋ฑ ํฐ์น๊ธฐ๋ฐ ์ค๋งํธ๊ธฐ๊ธฐ์ ์ฌ์ฉ๋๋
iOS
- ๋งฅ ์ฉ
OSX
- ์ ํ์๊ณ
watchOS
- ์ ํTV
tvOS
์ฐธ๊ณ
๋ฉ์ด์ ๋ฒ์ ( iOS 8, macOS 10.10 ๋ฑ) ์ ๋ช ๊ธฐํ ๋ฟ ์๋๋ผ ๋ง์ด๋ ๋ฒ์ ๊น์ง๋ ์ง์ ํ ์ ์๋ค. (iOS 11.2.5, macOS 10.13.3
switch
์ ๋ ฅ๋ฐ์ ๊ฐ์ ํจํด์ ๋น๊ตํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ์ผ๋ก ์คํ๋ธ๋ก์ ๊ฒฐ์ ํ๋ ์กฐ๊ฑด๋ฌธ.
switch <๋น๊ต๋์> {
case <๋น๊ตํจํด1> :
<๋น๊ตํจํด 1์ด ์ผ์นํ์ ๋ ์คํ๋๋ ๊ตฌ๋ฌธ>
case <๋น๊ตํจํด2>, <๋น๊ตํจํด3> :
<๋น๊ตํจํด 2 ๋๋ 3์ด ์ผ์นํ์ ๋ ์คํ๋๋ ๊ตฌ๋ฌธ>
default :
<์ด๋ ๋น๊ตํจํด๊ณผ๋ ์ผ์นํ์ง ์์์ ๋ ์คํ๋๋ ๊ตฌ๋ฌธ>
}
์ฆ, Swift์์๋ ์์์ ์ธ Fallthrough๊ฐ ์ ์ฉ๋์ง ์์.
๋๋ฌธ์ ๊ฐ๊ฐ์ case
๋ ๋ฐ๋์ ์คํํ ์ ์๋ ๊ตฌ๋ฌธ์ด ํฌํจ๋์ด์ผํจ. (๋น์ด์์ด์๋ X)
fallthrough
์ ์ํด ์คํํ๋ฆ์ ์ ๋ฌ๋ฐ์ case
๋ธ๋ก์ ๋น๊ตํจํด์ ์ผ์น์ฌ๋ถ์ ์๊ด์์ด ์์ฑ๋ ๊ตฌ๋ฌธ์ ์คํํ ํ switch
๊ตฌ๋ฌธ์ ์ข
๋ฃ.
let integerToDescribe = 5
var description = "The number \(integerToDescribe) is"
switch integerToDescribe {
case 2, 3, 5, 7, 11, 13, 17, 19:
description += " a prime number, and also"
fallthrough
default:
description += " an integer."
}
print(description)
// Prints "The number 5 is a prime number, and also an integer."
ํ๋์ case ํค์๋๋ก ๋น๊ตํจํด์ ๋ฌถ์ด ํํํ์ฌ, ์ฝ๋๋ฅผ ๋ณด๋ค ๊ฐ๊ฒฐํ๊ฒ ๋ง๋๋ ๋ฐ ํจ๊ณผ์ .
๋จ, ๋ชจ๋ ํจํด์ ๋งค์นญ์ํฌ ์ ์๋ ๊ตฌ๋ฌธ์ด ์กด์ฌํ๋ ๊ฒฝ์ฐ์ ํํด default
๊ตฌ๋ฌธ์ ์๋ตํ ์ ์์.
๐ Interval Matching
๋ฒ์์ฐ์ฐ์๋ฅผ ์ด์ฉ
let approximateCount = 62
let countedThings = "moons orbiting Saturn"
let naturalCount: String
switch approximateCount {
case 0:
naturalCount = "no"
case 1..<5:
naturalCount = "a few"
case 5..<12:
naturalCount = "several"
case 12..<100:
naturalCount = "dozens of"
case 100..<1000:
naturalCount = "hundreds of"
default:
naturalCount = "many"
}
print("There are \(naturalCount) \(countedThings).")
// Prints "There are dozens of moons orbiting Saturn."
๐ค ํํ Tuple
ํํ ๋ด๋ถ ์์ดํ ์ด ๋น๊ต ๋์๊ณผ ๋ถ๋ถ์ ์ผ๋ก ์ผ์นํ ๊ฒฝ์ฐ, case ๊ตฌ๋ฌธ์ ๋น๊ตํจํด ์ ์ฒด๊ฐ ์ผ์นํ๋ ๊ฒ์ผ๋ก ๊ฐ์ฃผ. ์ผ์นํ์ง ์๋ ๋๋จธ์ง ๋ถ๋ถ์ ์์ ๋๋ ๋ณ์ํํ์ฌ ์ฌ์ฉํ ์ ์์.
var value = (2, 3)
switch value {
case let (x, 3) :
printf("")
case let (3, y) :
print("")
case let (x, y) :
print("")
}
๐ Where...
where ๊ตฌ๋ฌธ์ ์ถ๊ฐํ์ฌ ๋ณด๋ค ๋ณต์กํ ํจํด๊น์ง ํ์ฅํ์ฌ ๋งค์นญํ ์ ์๋ค.
let yetAnotherPoint = (1, -1)
switch yetAnotherPoint {
case let (x, y) where x == y:
print("(\(x), \(y)) is on the line x == y")
case let (x, y) where x == -y:
print("(\(x), \(y)) is on the line x == -y")
case let (x, y):
print("(\(x), \(y)) is just some arbitrary point")
}
// Prints "(1, -1) is on the line x == -y"
3. ์ ์ด์ ๋ฌ๋ฌธ
์ฝ๋์ ํ ๋ถ๋ถ์์ ๋ค๋ฅธ ๋ถ๋ถ์ผ๋ก ์ ์ด ํ๋ฆ์ ์ ๋ฌํ์ฌ ์ฝ๋๊ฐ ์คํ๋๋ ์์๋ฅผ ๋ณ๊ฒฝํด์ฃผ๋ ๊ตฌ๋ฌธ.
break
๋ฐ๋ณต ์คํ์ค์ธ ๋ฃจํ๋ switch ๊ตฌ๋ฌธ์์์ ์คํํ๋ฆ ๋ฑ, ์กฐ๊ฑด์ ๊ฒฐ๊ณผ์ ์๊ด์์ด ์ฆ๊ฐ์ ์ผ๋ก ์ข ๋ฃํ๋ ๋ฐ์ ์ฌ์ฉ๋จ.
- switch ๊ตฌ๋ฌธ : ๊ฐ๋ณ
case
๋ธ๋ก์ ์ฌ์ฉ๋์ด ์ ์ฒดswitch
๊ตฌ๋ฌธ์ ์คํ์ ์ข ๋ฃํ๋ ์ญํ
- ๋ฐ๋ณต๋ฌธ : ์กฐ๊ฑด์์ด false๋ฅผ ๋ฐํํ๊ธฐ ์ ์ ๋ฏธ๋ฆฌ ๋ฐ๋ณต๋ฌธ์ ์ข ๋ฃํ๋ ์ญํ
for row in 0...5 {
if row > 2 { break }
print("\(row) was executed.")
}
continue
๊ตฌ๋ฌธ ์๋์ ์๋ ์คํ๊ตฌ๋ฌธ์ ๊ฑด๋๋ฐ๊ณ ๋ค์ ๋ฐ๋ณต์ ์์ํ๋ ์ญํ .
break
๊ตฌ๋ฌธ์ด ๋ฐ๋ณต๋ฌธ์ ์์ ํ ์ข
๋ฃํ๋ ๊ฒ๊ณผ ๋ฌ๋ฆฌ continue
๊ตฌ๋ฌธ์ ๋ฐ๋ณต๋ฌธ์ ์กฐ๊ฑด์ ๋ค์ ํ๊ฐํ๊ณ ๊ทธ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ ๋ค์ ๋ฐ๋ณต์ ์คํ.
for row in 0...5 {
if row > 2 { continue }
print("\(row) was executed.")
}
๊ตฌ๋ฌธ ๋ ์ด๋ธ๊ณผ break
, continue
์ค์ํํธ์์๋ ๋ฃจํ๋ ์กฐ๊ฑด๋ฌธ์ ๋ค๋ฅธ ๋ฃจํ๋ ์กฐ๊ฑด๋ฌธ ์์ ์ค์ฒฉ(nest)ํด์ ์ข ๋ ๋ณต์กํ ํ๋ฆ ๊ตฌ์กฐ๋ก ์งค ์ ์๋ค.
๊ทธ๋ฌ๋, ๋ฐ๋ณต๋ฌธ๊ณผ ์กฐ๊ฑด๋ฌธ ๋ชจ๋ break
๊ตฌ๋ฌธ์ ์คํ์ ์กฐ๊ธฐ์ข
๋ฃํ๋ ์ฉ๋๋ก ์ฌ์ฉํ๋ค.
์ค์ฒฉ๋ ๊ตฌ๋ฌธ ๋ด์์ continue์ break ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๋ ค๋ฉด, ์ฌ์ฉ๋ ๊ตฌ๋ฌธ์ด ์ด๋ค ๊ตฌ๋ฌธ์ ๋ฉ์ถ๊ฑฐ๋ ๋ค์ ์์ํ๊ฒ ํ ์ง ๋ช ํํ์ง ์๋ค. ๋๋ฌธ์ ๋ช ์์ ์ผ๋ก ๊ตฌ๋ฌธ์ ๋ช ๊ธฐํ๋ฉด ์ด๋ค ๊ตฌ๋ฌธ์ break ํ ์ง ํ๋จํ๊ธฐ ์ข์์ง๋ค.
๐ค ๊ตฌ๋ฌธ ๋ ์ด๋ธ (Statement Label)
Swift์์๋ ๋ฐ๋ณต๋ฌธ์ด๋ ์กฐ๊ฑด๋ฌธ ๋ฑ ํน์ ๊ตฌ๋ฌธ์ ๋ ์ด๋ธ์ ๋ถ์ฌ ๊ธฐ์ตํ ์ ์๋๋ก ํ๊ณ , break๋ continue ๊ตฌ๋ฌธ์ด ์ฌ์ฉ๋ ๋ ๋ ์ด๋ธ์ ๋ช ์ํด์ฃผ์ด ๊ฐ๋ฐ์๊ฐ ์ํ๋ ๊ตฌ๋ฌธ์์น์ ์ ํํ ํ๋ฆ์ ์ด๊ฐ ์ ์ฉ๋ ์ ์๋๋ก ํ๋ ๋ฌธ๋ฒ์ ์ ๊ณตํจ
<๋ ์ด๋ธ ์ด๋ฆ> :
while <์กฐ๊ฑด์> { <์คํํ ๊ตฌ๋ฌธ> }
break <๋ ์ด๋ธ ์ด๋ฆ>
continue <๋ ์ด๋ธ ์ด๋ฆ>
์๋ ์์๋ break
๊ตฌ๋ฌธ๊ณผ continue
๊ตฌ๋ฌธ์ ์ฌ์ฉํ๊ณ , ๊ทธ๋ฆฌ๊ณ ๊ตฌ๋ฌธ๋ ์ด๋ธ์ ๊ณ๋ค์ธ..., ๋ฑ๊ณผ ์ฌ๋ค๋ฆฌ Snakes and Ladders ๊ฒ์์ด๋ค.
์ฌ๊ธฐ์ ํ๊ฐ์ง ๊ท์น์ ๋ ์ถ๊ฐํ์๋ค.
- ์น๋ฆฌ ์กฐ๊ฑด : ์ ํํ 25๋ฒ ์ฌ๊ฐํ์ ๋์ฐฉํด์ผํ๋ค.
๋ง์ฝ ์ฃผ์ฌ์๋ฅผ ๊ตด๋ฆฐ ์ซ์๊ฐ, 25๋ฒ ์ฌ๊ฐํ์ ๋์ด๊ฐ๋ค๋ฉด, 25๋ฒ ์ซ์์ ๋์ฐฉํ ์ ์๋ ์ซ์๊ฐ ๋์ฌ ๋๊น์ง ๊ณ์ ์ฃผ์ฌ์๋ฅผ ๊ตด๋ ค์ผ๋ง ํ๋ค.
// ๋ณ์, ์์ ์ด๊ธฐํ
let finalSquare = 25
var board = [Int](repeating: 0, count: finalSquare + 1)
board[03] = +08; board[06] = +11; board[09] = +09;
board[10] = +02 board[14] = -10; board[19] = -11;
board[22] = -02; board[24] = -08 var square = 0
var diceRoll = 0
while
๋ฃจํ์ switch
๊ตฌ๋ฌธ์ ์ด์ฉํด ๊ฒ์ ๋ก์ง์ ํ์ฅ. while
๋ฃจํ๋ gameLoop
๋ผ๋ ๊ตฌ๋ฌธ๋ ์ด๋ธ์ด ๋ถ์ = ๋ฉ์ธ ๊ฒ์ ๋ฃจํ.
gameLoop:
while square != finalSquare {
diceRoll += 1
if diceRoll == 7 { diceRoll = 1 }
switch square + diceRoll {
case finalSquare:
// diceRoll will move us to the final square, so the game is over
break gameLoop
case let newSquare where newSquare > finalSquare:
// diceRoll will move us beyond the final square, so roll again
continue gameLoop
default:
// this is a valid move, so find out its effect
square += diceRoll
square += board[square]
}
}
print("Game over!")
์ฐธ๊ณ
๋ง์น๋ฉฐ
์ค๋๋ ์ฝ์ด์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
๊ถ๊ธํ ์ ์ด ์๋ค๋ฉด ๋๊ธ๋ก, ๋์์ด ๋์ จ๋ค๋ฉด ๊ณต๊ฐ ๋ถํ๋๋ฆฝ๋๋ค.
ํน์ ์์ ํ๊ฑฐ๋ ํผ๋๋ฐฑํ์ค ๋ด์ฉ ์๋ค๋ฉด ์ธ์ ๋ ๋๊ธ๋ก ๋ถํ๋๋ฆฝ๋๋ค.
๊ฐ์ฌํฉ๋๋ค.
๋๊ธ