๋ฌธ์์ด ๋ฐ ๋ฌธ์ ( Strings and Characters )
์๋ ํ์ธ์ : )
๋ฌธ์์ด๊ณผ ๋ฌธ์์ ๊ดํ์ฌ ์ ๋ฆฌ๋ฅผ ํด๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค!
Swift์ String์ Foundation์ ํ๋ ์์ํฌ์ NSString์ด bridge ๋ ํ์ ์ด๊ธฐ ๋๋ฌธ์ NSString์ ๋ฉ์๋๋ฅผ String์์ ์บ์คํ ์์ด ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค.
๋ฌธ์์ด ๋ฆฌํฐ๋ด
๋ฌธ์์ด์ " "๋ก ๋ฌถ์ด ํํํฉ๋๋ค.
let something = "Some string literal value"
์ฌ๋ฌ ์ค ๋ฌธ์์ด ๋ฆฌํฐ๋ด
let quotation = """
The White Rabbit put on his spectacles. "Where shall I begin,
please your Majesty?" he asked.
"Begin at the beginning," the King said gravely, "and go on
till you come to the end; then stop."
"""
์ฌ๋ฌ ์ค์ ๋ฌธ์์ด์ """ """ ๋ก ๋ฌถ์ด ํํํฉ๋๋ค.
//์ฌ๋ฌ์ค ๋ฌธ์์ด์ ์ฌ์ฉํ๋ฉฐ ์ค๋ฐ๊ฟ์ ํ ๋ ค๋ฉด \ ( ๋ฐฑ์ฌ๋์ฌ ) ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
let softWrappedQuotation = """
The White Rabbit put on his spectacles. "Where shall I begin, \
please your Majesty?" he asked.
"Begin at the beginning," the King said gravely, "and go on \
till you come to the end; then stop."
"""
//๋ฌธ์์ด์ ์์๊ณผ ๋์ ๋น์ค์ ๋ฃ์๋ ค๋ฉด ํ ์ค์ ๋์ด์ ๋ฌธ์์ด์ ์
๋ ฅํ๋ฉด ๋ฉ๋๋ค.
let lineBreaks = """
This string starts with a line break.
It also ends with a line break.
"""
์ฌ๋ฌ ์ค ๋ฌธ์์ด์ ๋ค์ฌ ์ฐ๊ธฐ๋ฅผ ํ ์ ์์ต๋๋ค. ๋ค์ฌ ์ฐ๊ธฐ ๊ธฐ์ค์ ๋๋๋ ์ง์ ์ """ ์ ์์น์ ๋๋ค.
๋ซ๋ """ ์์น ์์ ์๋ ๋ฌธ์๋ค์ ์ ๋ถ ๋ฌด์๋๊ณ ๊ทธ ์ดํ์ ๊ณต๋ฐฑ์ ๋ฌธ์์ด์ ๋ฐ์๋ฉ๋๋ค.
๋ฌธ์์ด ๋ฆฌํฐ๋ด์ ํน์ ๋ฌธ์
- \0 : null ๋ฌธ์
- \\ : ๋ฐฑ ์ฌ๋์
- \t : ์ํ ํญ
- \n : ์ค ๋ฐ๊ฟ
- \r : ์บ๋ฆฌ์ง ๋ฆฌํด
- \" : ํฐ ๋ฐ์ดํ
- \' : ์์๋ฐ์ดํ
- \u{n} : ์ ๋์ฝ๋ - n์ 1-8์๋ฆฌ 16์ง์ ํํ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
๋น ๋ฌธ์์ด ์ด๊ธฐํ
var emtpryString = ""
var anotherEmptyString = String()
๋ฌธ์์ด์ด ๋น์ด์๋์ง ์ฌ๋ถ๋ฅผ ํ์ธํ๊ธฐ ์ํด์๋ isEmpty๋ผ๋ ํ๋กํผํฐ๋ฅผ ์ด์ฉํฉ๋๋ค.
if emptyString.isEmpty {
print("Nothing to see here")
}
//"Nothing to see here"
๊ฐ ํ์ ๋ฌธ์์ด
Swift์ String์ ๊ฐ ํ์ (value type)์ ๋๋ค. ๊ทธ๋์ String์ด ๋ค๋ฅธ ํจ์ ๋๋ ๋ฉ์๋๋ก๋ถํฐ ๊ฐ์ด ํ ๋น๋ ๋ ์ด์ String์ ๋ ํผ๋ฐ์ค๋ฅผ ํ ๋นํ๋ ๊ฒ์ด ์๋ ๊ฐ์ ๋ณต์ฌํด์ ์์ฑํฉ๋๋ค.
๋ค๋ฅธ ๋ฉ์๋์์ ํ ๋น๋ฐ์ ๋ฌธ์์ด์ ๊ทธ ๋ฌธ์์ด์ ์์ ํด๋ ์๋ณธ ๋ฌธ์์ด์ด ๋ณํ์ง ์๊ธฐ ๋๋ฌธ์ ๊ด์ฐฎ์ต๋๋ค.
๋ค์ ๋ง ์ฐ๊ธฐ
๋ฌธ์
๋ฌธ์์ด์ ๊ฐ๋ณ ๋ฌธ์๋ฅผ for-in loop์ ์ฌ์ฉํ์ฌ ์ ๊ทผํ ์ ์์ต๋๋ค.
for character in "Cat!๐ธ" {
print(character)
}
// D
// o
// g
// !
// ๐ธ
// ๋ฌธ์ ์์๋ฅผ ์ ์ธํ ์์์ต๋๋ค.
let exclamationMark: Character = "!"
let catCharacters: [Character] = ["D", "o", "g", "!", "๐ถ"]
let catString = String(catCharacters)
print(catString)
// Prints "Dog!๐ถ"
๋ฌธ์ ๋ฐฐ์ด์ ์ด์ฉํ์ฌ ๋ฌธ์์ด ์ด๊ธฐํ ๋ฉ์๋์ ์ธ์๋ก ๋ฃ์ด ๋ฌธ์์ด์ ์์ฑํ ์๋ ์์ต๋๋ค.
๋ฌธ์์ด๊ณผ ๋ฌธ์์ ๊ฒฐํฉ
let string1 = "hello"
let string2 = " there"
var welcome = string1 + string2
print(welcome)
// "hello there"
var instruction = "look over"
instruction += string2
print(instruction)
//"look over there"
let exclamationMark: Character = "!"
welcome.append(exclamationMark)
// welcome : "hello there!"
๋ฌธ์์ด ์ฝ์
let mutiplier = 3
let message = "\(multiplier) times 2.5 is \(Double(multiplier) * 2.5)"
// message : "3 times 2.5 is 7.5"
๋ฐฑ์ฌ๋์ ๊ดํธ : \ ( ์์, ๋ณ์, ๋ฆฌํฐ๋ด ๊ฐ ) ๋ฅผ ์ด์ฉํด ๋ฌธ์์ด์ ์ถ๊ฐํ ์ ์์ต๋๋ค. -> \( )
๋ฌธ์์ด์ ์ ๊ทผ๊ณผ ์์
๋ฌธ์์ด์ ์์ ๊ณผ ์ ๊ทผ์ ๋ฌธ์์ด ๋ฉ์๋ ํน์ ํ๋กํผํฐ๋ฅผ ์ด์ฉํ๊ฑฐ๋ ์๋ธ ์คํฌ๋ฆฝํธ ๋ฌธ๋ฒ์ ์ด์ฉํ ์ ์์ต๋๋ค.
์๋ธ ์คํฌ๋ฆฝํธ๋ ์ฝ๋ ์ , ๋ฆฌ์คํธ, ์ํธ์ค ๋ฑ ์งํฉ์ ํน์ ๋ฉค๋ฒ ์๋ฆฌ๋จผํธ์ ๊ฐ๋จํ๊ฒ ์ ๊ทผํ ์ ์๋ ๋ฌธ๋ฒ์ ๋๋ค. ์๋ธ ์คํฌ๋ฆฝํธ๋ฅผ ์ด์ฉํ๋ฉด ์ถ๊ฐ์ ์ธ ๋ฉ์๋ ์์ด ํน์ ๊ฐ์ ํ ๋นํ๊ฑฐ๋ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
์๋ธ ์คํฌ๋ฆฝํธ ๊ด๋ จํด์๋ ๋ฐ๋ก ๊ธ์ ์์ฑํ์ฌ ์ ๋ฆฌํด๋ณผ ์๊ฐ์ ๋๋ค!! ( ๋งํฌ ๋ฃ์ ๊ณณ )
๋ฌธ์์ด ์ธ๋ฑ์ค
- startIndex : ๋ฌธ์์ด์ ์ฒซ ๋ฒ์งธ ์ธ๋ฑ์ค ๋ฐํ
- endIndex : ๋ฌธ์์ด์ด ๋๋ ํ ๋ฐ๋ก ์ธ๋ฑ์ค ๋ฐํ โป ๊ทธ๋ฅ ์ ๊ทผ ์ out of bounds ์๋ฌ ๋ฐ์ -> ์์๋ฅผ ํตํด ์์๋ด ์๋ค!
- index(before: ) : ์ง์ ์ธ๋ฑ์ค ๋ฐํ
- index(after: ) : ์งํ ์ธ๋ฑ์ค ๋ฐํ
- index(_: offsetBy: ) : offsetBy ๋ฉ์๋๋ ์์ ์ง์ ๋ถํฐ ๋จ์ด์ง ์ ์ ๊ฐ๋ง์ ๋ํ ์์น๋ฅผ ๋ฐํํฉ๋๋ค.
โถ ์์ ๋ฉ์๋๋ค์ Collection ํ๋กํ ์ฝ์ ๋ฐ๋ฅด๋ Array, Dictionary, Set ๋ฑ์์ ๋์ผํ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์์ ๋ฉ์๋๋ค์ ์์์ ๋๋ค
let greeting = "Swift is good"
greeting[greeting.startIndex]
// greeting ์ฒซ๋ฒ์งธ ์ธ๋ฑ์ค๊ฐ์ ์ถ๋ ฅํฉ๋๋ค.
// S
greeting[greeting.index(before: greeting.endIndex)]
// greeting์ ๋ง์ง๋ง ์ธ๋ฑ์ค ๊ฐ์ ์ถ๋ ฅํฉ๋๋ค.
// d
greeting[greeting.index(after: greeting.startIndex)]
// greeting ์ฒซ๋ฒ์งธ ์ธ๋ฑ์ค๊ฐ์ ์ดํ ๊ฐ์ ์ถ๋ ฅํฉ๋๋ค.
// w
let index1 = greeting.index(greeting.startIndex, offsetBy: 0) //S
greeting[index1]
//greeting.startIndex์ผ๋ก ์์ ์์ ์ ์ ํ๊ณ 0๋งํผ ๋จ์ด์ง ๊ฒ์ ์๊ธฐ ์์ ์ด ๋ฉ๋๋ค.
let index2 = greeting.index(greeting.startIndex, offsetBy: 4) //t
greeting[index2]
//greeting.startIndex์ผ๋ก ์์ ์์ ์ ์ ํ๊ณ 4๋งํผ ๋จ์ด์ง ๊ฒ์ t์
๋๋ค
let index3 = greeting.index(greeting.endIndex, offsetBy: -1) //d
greeting[index3]
//greeting.endIndex์ ์ ์ฒด ๊ธธ์ด๋ฅผ ๋ฐํ ํ๋ฏ๋ก -1์ ๋ํ๋ฉด ์ ์ฒด String์ ๋ง์ง๋ง ๋ฌธ์์ธ d๊ฐ ๋ฉ๋๋ค.
let index4 = greeting.index(greeting.endIndex, offsetBy: -4) //g
greeting[index4]
//์์ ๊ฐ์ ์๋ฆฌ๋ก -3์ ๋ํ๋ฉด g๊ฐ ๋ฉ๋๋ค.
startIndex, endIndex๋ ์์๊ณผ ๋ ๊ฐ๋ง ์ ๊ทผ์ด ๊ฐ๋ฅํด์ ์ค๊ฐ์ ์๋ ๋ฌธ์๋ ์ ๊ทผํ๊ธฐ ์ด๋ ค์ index(_: offsetBy : )๋ฅผ ์ฌ์ฉํฉ๋๋ค.
โป endIndex์ ์ฌ์ฉํด์ ์ผ์ด๋ ์ ์๋ ์๋ฌ ์์ ( out of bounds )
greeting[greeting.endIndex] // ์๋ฌ!
greeting.index(after: greeting.endIndex) // ์๋ฌ!
greeting.startIndex๋ 0์ ๋ฐํํ์ง๋ง greeting.endIndex๋ ์ ์ฒด String์ ๊ธธ์ด๋ฅผ ๋ฐํํ๋ฏ๋ก 13์ ๋ฐํํ์ฌ ๋ฒ์์ ๋ฒ์ด๋ ์ฒซ ๋ฒ์งธ ์์ ์์ ์ค๋ฅ๊ฐ ๋ฉ๋๋ค.
๋ ๋ฒ์งธ ์๋ฌ์ธ greeting.index(after: greeting.endIndex) -> endIndex์ after ๋ํ ๋ฒ์์ ๋ฒ์ด๋ ์๋ฌ๊ฐ ๋์ต๋๋ค.
๋ฉ์๋ ์์ ์๋ greeting[greeting.index(before: greeting.endIndex)] -> String ์ ์ฒด ๊ธธ์ด์ ์ด์ ์ ๊ฐ์ ๋ฐํํ๊ธฐ ๋๋ฌธ์ ์ ์์ ์ธ ๊ฐ์ด ์ถ๋ ฅ๋ฉ๋๋ค.
๋ฌธ์์ด์ ๊ฐ๋ณ ๋ฌธ์๋ฅผ ์ ๊ทผํ๊ธฐ ์ํด์๋ indices ํ๋กํผํฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
for index in greeting.indices {
print("\(greeting[index]) ", terminator: "")
// G u t e n T a g !
}
↓ terminator์ ๊ดํ์ฌ
๊ณต์ ๋ฌธ์์ธ Apple Developer Documentation printํจ์์์ ์์ธํ ๋ด์ฉ์ ๋ณผ์์์ต๋๋ค!
๊ณต๋ฐฑ์ด ์๋ ๋ค๋ฅธ ํญ๋ชฉ์ผ๋ก ๊ตฌ๋ถ๋ ํญ๋ชฉ์ ์ธ์ํ๋ ค๋ฉด ๋ฌธ์์ด์ separator
print(1.0, 2.0, 3.0, 4.0, 5.0, separator: " ... ")
// Prints "1.0 ... 2.0 ... 3.0 ... 4.0 ... 5.0"
// separator์ ์ฌ์ฉ ์ ํ์ ๊ฒฝ์ฐ
print(1.0, 2.0, 3.0, 4.0, 5.0)
// 1.0 2.0 3.0 4.0 5.0
๊ฐ ํธ์ถ์ ์ถ๋ ฅ์๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐํ์ด ํฌํจ๋ฉ๋๋ค. ํํ ๊ฐํ ์์ด ํญ๋ชฉ์ print ํ๋ ค๋ฉด ๋น ๋ฌธ์์ด์ terminator
for n in 1...5 {
print(n, terminator: "")
}
// Prints "12345"
// terminator ์ฌ์ฉ ์ ํ์ ๊ฒฝ์ฐ
for n in 1...5 {
print(n)
}
// 1
// 2
// 3
// 4
// 5
๋ฌธ์์ ์ฝ์ ๊ณผ ์ญ์
๋ฌธ์์ ์ฝ์ ๊ณผ ์ญ์ ๋ฉ์๋์๋
- insert ( :at: ) : ํด๋น ์์น์ ์์ ์ฝ์
- insert ( contentsOf: at : ) : ํด๋น ์์น์ ์์ ์ฝ์
- remove( at: ) : ํน์ ์์น์ ์๋ ์์ ์ ๊ฑฐ
- removeSubrange( : ) : ํน์ ์์น์ ์์ ์ ๊ฑฐ
โถ ์์ ๋ฉ์๋ค์ RangeReplaceableCollection ํ๋กํ ์ฝ์ ๋ฐ๋ฅด๋ Array, Dictionary, Set ๋ฑ์์๋ ๋์ผํ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค.
RangeReplaceableCollection ํ๋กํ ์ฝ ๊ด๋ จํด์๋ ๋ฐ๋ก ์ ๋ฆฌ๋ฅผ ํด๋ณผ ์์ ์ ๋๋ค!!
var welcome = "hello"
welcome.insert("!", at: welcome.endIndex)
// welcome ์ ๋ฌธ์์ด์ด ๋๋ ๋ฐ๋ก ๋ค์ ์ถ๊ฐ๋ฅผ ํฉ๋๋ค.
// welcome : hello!
welcome.insert(contentsOf: " there", at: welcome.index(before: welcome.endIndex))
// welcome์ ๋ง์ง๋ง ๊ฐ ์์ there ๊ฐ์ insert ํด์ค๋๋ค.
// 2๋ฒ ๊ตฌ๋ฌธ์์ welcome์ var์ผ๋ก ์ ์ธํ์ฌ "hello" -> "hello!"์ผ๋ก ๋ฐ๋์ด ์๋ ๊ฒฐ๊ณผ ๊ฐ์ผ๋ก ์ถ๋ ฅ
// welcome : hello there!
//
var goodbye = "hi swift@"
goodbye.insert(contentsOf: " there", at: goodbye.index(before: goodbye.endIndex))
// welcome : hi swift there@
๋ฌธ์์ด์ ํน์ ์ธ๋ฑ์ค๋ก ํ๋์ ๋ฌธ์๋ฅผ ์ฝ์ ํ๊ธฐ ์ํด insert ( :at: ) ๋ฉ์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.
ํน์ ์ธ๋ฑ์ค์ ๋ค๋ฅธ ๋ฌธ์์ด์ ๋ด์ฉ์ ์ฝ์ ํ๊ธฐ ์ํด insert ( contentsOf: at : )๋ฉ์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.
var welcomeRemove = "hello there!"
welcomeRemove.remove(at: welcomeRemove.index(before: welcomeRemove.endIndex))
// ๋ง์ง๋ง ์ธ๋ฑ์ค ๋ฌธ์๋ฅผ ํ๋ ์ง์๋๋ค.
// welcomeRemove : hello there
var welcome = "hello there!"
let range = welcome.index(welcome.endIndex, offsetBy: -6)..<welcome.endIndex
welcome.removeSubrange(range)
// welcome์ String๊ฐ์์ -6์ ๋บธ ์ง์ ์์ welcome์ ๋ง์ง๋ง ์ง์ ๊น์ง let range๋ก ์ ์ธ
// removeSubrange์์ range๋ถ๋ถ์ ์ ๊ฑฐ
// welcome : hello
ํน์ ์ธ๋ฑ์ค์ ์๋ ๋ฌธ์์ด์์ ํ๋์ ๋ฌธ์๋ฅผ ์ ๊ฑฐํ๊ธฐ ์ํด remove( at: ) ๋ฉ์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.
ํน์ ๋ฒ์์ ๋ถ๋ถ ๋ฌธ์์ด์ ์๋ธ ์คํธ๋ง์ ์ ๊ฑฐํ๊ธฐ ์ํด removeSubrange( : ) ๋ฉ์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.
๋ถ๋ถ ๋ฌธ์์ด ( Substrings )
๋ฌธ์์ด์์ ๋ถ๋ถ ๋ฌธ์๋ฅผ ์ป๊ธฐ ์ํด prefix (_ : ) ์ ๊ฐ์ ์๋ธ ์คํฌ๋ฆฝํธ ๋ฉ์๋๋ฅผ ์ด์ฉํ ์ ์์ต๋๋ค.
๊ทธ๋ ๊ฒ ์ป์ ๋ถ๋ถ ๋ฌธ์์ด์ ๋ฌธ์์ด ์ธ์คํด์ค๊ฐ ์๋ ๋ถ๋ถ ๋ฌธ์์ด ์ธ์คํด์ค์ ๋๋ค.
โท ๋ถ๋ถ ๋ฌธ์์ด์ ๋จ๊ธฐ๊ฐ์ ์ฌ์ฉํ๋ ๊ฒ ์๋ ์ค๋ ๊ธฐ๊ฐ ๋์ ์ฌ์ฉํ๋ค๋ฉด ๋ฌธ์์ด ์ธ์คํด์ค๋ก ๋ฐ๊ฟ์ ์ฌ์ฉํ๋ ๊ฒ ์ข์ต๋๋ค.
let greeting = "Hello, World!"
let index = greeting.index(of: ",") ?? greeting.endIndex
let beginning = greeting[..<index]
// beginning : Hello
// SubString์ธ beginning์ String์ผ๋ก ๋ณํ
let newString = String(beginning)
์์ ์์ ์ฒ๋ผ ์ฌ์ฉํด์ผ ์ข์ ์ด์ ๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ์ฐ๊ด ์์ต๋๋ค. Substring์ ํด๋น ๋ฌธ์๋ฅผ ์ง์ ๊ฐ๊ณ ์๋ ๊ฒ์ด ์๋๋ผ ์๋ณธ String์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐธ์กฐํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
SubString์ ๊ณ์ ์ด์ฉํ๋ ์ด์์ ์๋ณธ String์ธ greeting์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๊ณ์ ๋จ์ ์๊ฒ ๋ฉ๋๋ค. ์ฌ์ฉํ์ง ์๋ ๋ฌธ์์ด๊น์ง๋ ๋จ์ ์ ์์ต๋๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ SubString์ ์คํด ์ฌ์ฉํ๊ณ ์ ํ๋ค๋ฉด ์์ ์ฝ๋ ์์ ์ฒ๋ผ String์์ ์ธ์คํด์ค๋ก ๋ง๋ค์ด ์ฌ์ฉํ๊ณ ์ ํ๋ ๋ฌธ์๋ง ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ ค๋๊ณ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ด๋ฆฌ ํจ์จ๋ฉด์์ ์ข์ต๋๋ค.
โป String๊ณผ SubString ๋ชจ๋ StringProtocol์ ๋ฐ๋ฆ ๋๋ค. ๋ฌธ์ ์กฐ์์ ํ์ํ ๋ฉ์๋๋ค์ ๊ณตํต์ผ๋ก ์ฌ์ฉ ๊ฐ๋ฅํฉ๋๋ค
๋ฌธ์์ด๊ณผ ๋ฌธ์ ๋น๊ต
๋ฌธ์์ด๊ณผ ๋ฌธ์ ๋น๊ต์๋ ==( ์ผ์น ) ๋๋ !=( ๋ถ์ผ์น ) ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
let quotation = "We're a lot alike, you and I."
let sameQuotation = "We're a lost alike, you and I."
if quotation == sameQuotation {
print("These two strings are considered equal")
}
// quotation ๊ณผ sameQuotation ๋ฌธ์์ด์ด ๊ฐ์ ๊ฒฝ์ฐ ์ถ๋ ฅ
// These two strings are considered equal ์ถ๋ ฅ
์ ๋์ฌ์ ์ ๋ฏธ์ฌ ๋น๊ต
์ ๋์ฌ์ ์ ๋ฏธ์ฌ์ ๋น๊ต๋ฅผ ์ํด hasPrefix ( : ) , hasSuffix( : ) ๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
String์ธ์๋ฅผ ๋ฐ์ ๋ฆฌํด ๊ฐ์ผ๋ก Boolean๊ฐ์ ๋ฐํํฉ๋๋ค.
let romeoAndJuliet = [
"Act 1 Scene 1: Verona, A public place",
"Act 1 Scene 2: Capulet's mansion",
"Act 1 Scene 3: A room in Capulet's mansion",
"Act 1 Scene 4: A street outside Capulet's mansion",
"Act 1 Scene 5: The Great Hall in Capulet's mansion",
"Act 2 Scene 1: Outside Capulet's mansion",
"Act 2 Scene 2: Capulet's orchard",
"Act 2 Scene 3: Outside Friar Lawrence's cell",
"Act 2 Scene 4: A street in Verona",
"Act 2 Scene 5: Capulet's mansion",
"Act 2 Scene 6: Friar Lawrence's cell"
]
var act1SceneCount = 0
for scene in remeoAndJuliet {
if scene.hasPrefix("Act 1 ") {
act1SceneCount += 1
}
}
print("There are \(act1SceneCount) scenes in Act 1")
// There are 5 scenes in Act 1
์์ ์ฝ๋๋ ๋ฌธ์์ด ๋ฐฐ์ด์์ ์ ๋์ด Act 1์ด ๋ช ๊ฐ ๋ค์ด์๋์ง ํ์ธํ๋ ์ฝ๋์ ๋๋ค
๋ค์์ ์๋์ ์ฝ๋๋ ๋ฌธ์์ด ๋ฐฐ์ด์์ ์ ๋ฏธ์ด Capulet's mansion๊ณผ Friar Lawrences' cell์ด ๊ฐ๊ฐ ๋ช ๊ฐ ๋ค์ด์๋์ง ํ์ธํฉ๋๋ค.
var mansionCount = 0
var cellCount = 0
for scene in remeoAndJuliet {
if scene.hasSuffix("Capulet's mansion") {
mansionCount += 1
} else if scene.hasSuffix("Friar Lawrence's cell") {
cellCount += 1
}
}
print("\(mansionCount) mansion scenes; \(cellCount) cell scenes")
// 6 mansion scenes; 2 cell scenes
๋ฌธ์์ด ๋ฐ ๋ฌธ์์ ๊ด๋ จํ์ฌ ์ ๋ฆฌ๋ฅผ ํ๋๋ฐ์ ์ ๋์ฝ๋์ ๋ํด์๋ ๋ฐ๋ก ๊ณต๋ถ์ ์ ๋ฆฌ๋ฅผ ํตํด ๊ธ๋ก ์์ฑํด ๋ณผ ๊ฑฐ ๊ฐ์ต๋๋ค!!