๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐ŸŽ/Swift

[Swift] ๋ฌธ์ž์—ด ๊ด€๋ จ ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์„œ๋“œ

by yenios 2021. 7. 12.

 

 

 

 

 

์Šค์œ„ํ”„ํŠธ ๊ณต์‹ ๋ฌธ์„œ ๋ฒˆ์—ญ๋ณธ์„ ์ฐธ๊ณ ํ•˜์—ฌ ๊ธฐ๋ณธ์ ์ธ ๋ฌธ์ž์—ด ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์„œ๋“œ๋ฅผ ์ •๋ฆฌํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค. :)

 

 

 

 

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

 

 

 

 

์ฐธ๊ณ  ๐Ÿ‘€

 

๋ฌธ์ž์—ด๊ณผ ๋ฌธ์ž (Strings and Characters)

 

jusung.gitbook.io

 

Swift String ๋‹ค๋ฃจ๊ธฐ

Swift์˜ String method๋“ค์— ๋Œ€ํ•ด ์•Œ์•„๋ด…๋‹ˆ๋‹ค.

hcn1519.github.io

 

๋Œ“๊ธ€