์ค์ํํธ ๊ณต์ ๋ฌธ์ ๋ฒ์ญ๋ณธ์ ์ฐธ๊ณ ํ์ฌ ๊ธฐ๋ณธ์ ์ธ ๋ฌธ์์ด ํ๋กํผํฐ์ ๋ฉ์๋๋ฅผ ์ ๋ฆฌํด๋ณด์์ต๋๋ค. :)
1. ๋ฌธ์์ด ์ด๊ธฐํ ๋ฉ์๋
๋ค๋ฅธ ์ธ์ด๋ค๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก Swift ๋ํ ์คํธ๋ง ํ์ ๊ณผ ์บ๋ฆญํฐ ๋ฐฐ์ด์ด ํธํ๋ฉ๋๋ค.
์ด๋ฅผ ํ์ธํ๊ธฐ ์ํด ๋จผ์ ์์ ํ์ ์ catCharacters ์บ๋ฆญํฐ ๋ฐฐ์ด์ ์ ์ธ ํ ํ ๊ธ์์ฉ ํ ๋นํด์ค๋๋ค.
์ดํ ์์ ํ์ ์ catString์ ๋ฌธ์์ด ์ด๊ธฐํ ๋ฉ์๋์ธ String(์คํธ๋ง ํน์ ์บ๋ฆญํฐ ๋ฐฐ์ด)์ ํ ๋นํด์ค๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋์ carString์ ์ถ๋ ฅํ์ ๋ "Cat!๐ฑ"์ด ์ถ๋ ฅ๋๋ ๊ฒ์ ํ์ธํ ์ ์์ด์.
let catCharacters: [Character] = ["C", "a", "t", "!", "๐ฑ"]
let catString = String(catCharacters)
print(carString)
// Prints "Cat!๐ฑ"
2. ๋ฌธ์์ด๊ณผ ๋ฌธ์์ ๊ฒฐํฉ
๋ฌธ์์ด๊ณผ ๋ฌธ์๋ฅผ ๊ฒฐํฉํ๋ ๋ฐฉ์์ ํฌ๊ฒ ์ธ ๊ฐ์ง ์ ๋๋ค.
๋ณธ ์์๋ string1, string2, welcome, instruction, exclamation์ ํจ๊ป ์ ์ธํ ๊ฒฝ์ฐ๋ฅผ ๊ฐ์ ํฉ๋๋ค.
- + ์ฐ์ฐ์๋ฅผ ์ด์ฉํ ๊ฒฐํฉ : string3 = string1 + string 2 ์ฐ์ฐ์ string 3์ ๋ ๊ฐ์ ์คํธ๋ง์ ์ฐ๊ฒฐํ ๊ฒฐ๊ณผ๋ฅผ ํ ๋นํ๋ ๊ฒ์ ๋๋ค.
let string1 = "hello"
let string2 = " there"
var welcome = string1 + string2
// welcome : "hello there"
- += ์ฐ์ฐ์๋ฅผ ์ด์ฉํ ๊ฒฐํฉ : string 1 += string2 ์ฐ์ฐ์ string1 ๋ฐ๋ก ๋ค์ string2๋ฅผ ๊ทธ๋๋ก ๋ํ๋ ๊ฒ์ ๋๋ค.
var instruction = "look over"
instruction += string2
// instruction : "look over there"
- oppend ๋ฉ์๋๋ฅผ ์ด์ฉํ ๊ฒฐํฉ : string1.oppend(string2)๋ ๋ฌธ์์ด string1 ๋ค์ ๋ฌธ์์ด string2๋ฅผ ๋ํด์ฃผ๋ ์ฐ์ฐ์ ๋๋ค. string 1+= string2 ์ ๊ฒฐ๊ณผ๊ฐ ๊ฐ์ต๋๋ค.
let exclamationMark: character = "!"
welcome.append(exclamationMark)
// welcome : "hello there!"
3. ๋ฌธ์ ์ธ๊ธฐ ํ๋กํผํฐ
๋ฌธ์์ด์ด๋ฆ.count ํ๋กํผํฐ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฌธ์์ด์ ๊ธ์ ์๊ฐ ๋ฐํ๋ฉ๋๋ค.
let unusualMenagerie = "Koala ๐จ, Snail ๐, Penguin ๐ง, Dromedary ๐ช"
print("unusualMenagerie has \(unusualMenagerie.count) characters")
// unusualMenagerie has 40 characters
4. ๋ฌธ์์ด ์ ๊ทผ๊ณผ ์์
- ๋ฌธ์์ด ๋ฉ์๋ ํน์ ํ๋กํผํฐ, ์๋ธ์คํฌ๋ฆฝํธ ๋ฌธ๋ฒ์ ํตํด ๋ฌธ์์ด ์ ๊ทผ๊ณผ ์์ ์ด ๊ฐ๋ฅํฉ๋๋ค.
- ๋ฌธ์์ด ์ ๊ทผ ๊ด๋ ๋ฉ์๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- startIndex : ๋ฌธ์์ด์ ์ฒซ๋ฒ ์งธ ์ธ๋ฑ์ค ๋ฐํ
- endIndex : ๋ฌธ์์ด์ด ๋๋ ํ ๋ฐ๋ก ๋ค์ ์ธ๋ฑ์ค ๋ฐํ (๊ทธ๋ฅ ์ ๊ทผ์ out of bounds ์๋ฌ ๋ฐ์)
- index(before:) : ์ง์ ์ธ๋ฑ์ค ๋ฐํ
- index(after:) : ์งํ ์ธ๋ฑ์ค ๋ฐํ
- index(_:offsetBy) : _๋ก๋ถํฐ ์ธ๊ธ๋๋งํผ ๋จ์ด์ง ์ ์ ๊ฐ์ ๋ํ ์์น ๋ฐํ
- offsetBy ๋ฉ์๋๋ ์์ ์ง์ ๋ถํฐ ๋จ์ด์ง ์ ์ ๊ฐ๋ง์ ๋ํ ์์น๋ฅผ ๋ฐํํฉ๋๋ค.
- ์ด๋ค์ Collection ํ๋กํ ์ฝ์ ๋ฐ๋ฅด๋ Array, Dictionary, Set ๋ฑ์์๋ ๋์ผํ๊ฒ ์ฌ์ฉ๋ฉ๋๋ค.
let greeting = "Guten Tag!"
greeting[greeting.startIndex]
// G
greeting[greeting.index(before: greeting.endIndex)]
// !
// greeting[greeting.endIndex]์ out of bouds ์๋ฌ
// Swift/StringRangeReplaceableCollection.swift:302: Fatal error: String index is out of bounds
greeting[greeting.index(after: greeting.startIndex)]
// u
let index = greeting.index(greeting.startIndex, offsetBy: 7)
greeting[index]
// a
- ๋ฌธ์์ด์ ์ธ๋ฑ์ค๋ฅผ ๋ฒ์ด๋๋ ๋ฌธ์๋ฅผ ๊ฐ์ ์ค๋ ค๊ณ ํ๋ฉด ๋ฐํ์ ์๋ฌ ๋ฐ์ํฉ๋๋ค.
greeting[greeting.endIndex]
// ์๋ฌ
greeting.index(after: greeting.endIndex)
// ์๋ฌ
- ๋ฌธ์์ด์ ๊ฐ๋ณ ๋ฌธ์๋ฅผ ์ ๊ทผํ๊ธฐ ์ํด์๋ indicies ํ๋กํผํฐ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
for index in greeting.indices {
print("\(greeting[index]) ", terminator: "") // terminator: ""์ ๊ฐํ ์์ด ์ถ๋ ฅ์ ์๋ฏธ
}
// Prints : G u t e n T a g !
5. ๋ฌธ์์ ์ฝ์ ๊ณผ ์ญ์
- ๋ฌธ์์ ์ฝ์
๊ณผ ์ญ์ ๋ฉ์๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ๊ฐ ๋ฉ์๋์ ์ฐจ์ด๋ ์ฝ๋์์ ๋ณผ ์ ์์ต๋๋ค.
- insert(:at:) : ํด๋น ์์น์ ์์ ์ฝ์
- insert(contentsOf:at:) ํด๋น ์์น์ ์์ ์ฝ์
- remove(at:) : ํน์ ์์น์ ์๋ ์์ ์ ๊ฑฐ
- removeSubrange(:) : ํน์ ์์น์ ์์ ์ ๊ฑฐ
- Collection ํ๋กํ ์ฝ์ ๋ฐ๋ฅด๋ Array, Dictionary, Set ๋ฑ์์๋ ๋์ผํ๊ฒ ์ฌ์ฉ๋ฉ๋๋ค.
var welcome = "hello"
welcome.insert("!", at: welcome.endIndex)
// ๋ง์ง๋ง ์ธ๋ฑ์ค(๋ฌธ์์ด์ด ๋๋๊ณ ๋ ๋ฐ๋ก ๋ค)์! ์ถ๊ฐ
// welcome : hello!
welcome.insert(contentsOf: " there", at: welcome.index(before: welcome.endIndex))
// ๋ง์ง๋ง ์ธ๋ฑ์ค ์ ์ " there" ์ถ๊ฐํด์ hello ๋ค์ !ํ๋ ์ง์์ง๊ณ ๊ทธ ๋ค์ insert๋ ์ํฉ
// welcome : hello there!
welcome.remove(at: welcome.index(before: welcome.endIndex))
// ๋ง์ง๋ง ์ธ๋ฑ์ค(๋ฌธ์์ด์ด ๋๋๊ณ ๋ ๋ฐ๋ก ๋ค)
// welcome : hello there
let range = welcome.index(welcome.endIndex, offsetBy: -6)..<welcome.endIndex
// range๋ "hello there"์ endIndex์์ -6์ธ ์ง์ (hello ๋ฐ๋ก ๋ค)์์ ๋ง์ง๋ง ์ธ๋ฑ์ค๊น์ง๋๊น
// range = " there!"
welcome.removeSubrange(range)
// welcome์์ " there!"๋ฅผ ๋นผ๋ฉด
// welcome : hello
6. ๋ถ๋ถ ๋ฌธ์์ด
- ๋ฌธ์์ด์์ ๋ถ๋ถ ๋ฌธ์๋ฅผ ์ป๊ธฐ ์ํด์ prfix (_:)์ ๊ฐ์ ์๋ธ์คํฌ๋ฆฝํธ ๋ฉ์๋๋ฅผ ์ด์ฉํ ์ ์์ต๋๋ค. ๊ทธ๋ ๊ฒ ์ป์ ๋ฌธ์์ด์ ๋ฌธ์์ด(String) ์ธ์คํด์ค๊ฐ ์๋๋ผ ๋ถ๋ถ๋ฌธ์์ด (SubString)์ธ์คํด์ค ์ ๋๋ค. ์ฆ, ๋ค๋ฅธ ํ์ ์ผ๋ก ๋ณผ ์ ์์ต๋๋ค. ์๋ฐํ ๋งํ์๋ฉด SubString์ ํด๋น ๋ฌธ์๋ฅผ ์ง์ ๊ฐ๊ณ ์๋ ๊ฒ์ด ์๋๋ผ ์๋ณธ String์ ์ฐธ์กฐํ๋ ํ์ ์ ๋๋ค. ํจ๊ณผ์ ์ธ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ์ํด SubString์ ๊ณ์ ์ฌ์ฉํ๊ฒ ๋๋ค๋ฉด String ํ์ ์ ์ธ์คํด์ค๋ฅผ ์๋ก ๋ง๋ค์ด ํ ๋นํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
- String๊ณผ SubString์ ๋ชจ๋ StringProtocol์ ๋ฐ๋ฅด๊ธฐ ๋๋ฌธ์ ๋ฉ์๋๋ค์ ๊ณตํต์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
let greeting = "Hello, World!"
let index = greeting.index(of: ",") ?? greeting.endIndex
// greeting.index(of: ",")๋ฅผ ์ต์
๋ ๊ฐ์ ์ถ์ถ. ๋ง์ฝ์ nil์ธ ๊ฒฝ์ฐ greeting.endIndex ๋ฐํ
// ์ฌ๊ธฐ์ index๋ ","์ ์ธ๋ฑ์ค์ธ 5
let beginning = greeting[..<index]
// beginning : Hello
// SubString์ธ beginning์ String์ผ๋ก ๋ณํ
let newString = String(beginning)
7. ๋ฌธ์์ด๊ณผ ๋ฌธ์ ๋น๊ต
- ๋ฌธ์์ด๊ณผ ๋ฌธ์ ๋น๊ต์ ==(์ผ์น)์ !=(๋ถ์ผ์น)์ ์ฌ์ฉํฉ๋๋ค.
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")
}
// These two strings are considered equal ์ถ๋ ฅ
8. ์ ๋์ฌ์ ์ ๋ฏธ์ฌ ๋น๊ต
- ์ ๋์ฌ ๋น๊ต๋ฅผ ์ํ ๋ฉ์๋ : hasPrefix(:)
- ์ ๋ฏธ์ฌ ๋น๊ต๋ฅผ ์ํ ๋ฉ์๋ : hasSuffix(:)
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"
]
// ์ ๋์ด Act 1์ ๊ฐ์ ์ธ๊ธฐ
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
// ์ ๋ฏธ์ด Capulet's massion๊ณผ 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
์ฐธ๊ณ ๐
'๐ > Swift' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[iOS] ๊ณต๊ณต ๋ฐ์ดํฐ API ์ด์ฉํ๊ธฐ (Alamofire) (0) | 2021.08.22 |
---|---|
[Swift] ๋งค๊ฐ๋ณ์(Parameter)์ ์ ๋ฌ์ธ์(Argument) + ์ ๋ฌ์ธ์ ๋ ์ด๋ธ(Argument Label) (0) | 2021.08.05 |
[Xcode] ํ๋ฉด ๋ค์ง๊ธฐ (0) | 2021.06.21 |
[iOS] Height is ambiguous ๊ฒฝ๊ณ (0) | 2021.06.17 |
[Swift] ๊ตฌ์กฐ์ฒด์ ํด๋์ค์ ์ฐจ์ด (0) | 2021.06.16 |
๋๊ธ