Swift - ๋ฌธ์ž์—ด ์ธ๋ฑ์Šค

2022. 10. 4. 13:32ใ†ios

Swift - ๋ฌธ์ž์—ด

 

 

 ๋ฌธ์ž์—ด์ด๋ž€?

 

์Šค์œ„ํ”„ํŠธ์—์„œ ๋ฌธ์ž์—ด์€ ์Œ๋”ฐ์˜ดํ‘œ ์•ˆ์— ๋ฌธ์ž๋“ค์„ ์—ฐ๊ฒฐํ•œ ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

๋ฌธ์ž๋“ค์ด ์ €์žฅ๋  ๋•Œ๋Š” ์œ ๋‹ˆ์ฝ”๋“œ ๋ฌธ์ž๋“ค๋กœ ๊ตฌ์„ฑ๋˜๋Š”๋ฐ ์ด๋“ค์€ UTF-32๋กœ ์ €์žฅ์ด ๋œ๋‹ค.

 

๋งŒ์•ฝ 32๋น„ํŠธ๊ฐ€ ์•„๋‹Œ 16๋น„ํŠธ๋‚˜ 8๋น„ํŠธ๋กœ ์ €์žฅํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด String์˜ ๋‚ด์žฅ๋ฉ”์„œ๋“œ์ธ utf8์ด๋‚˜ utf16์„ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

 

let str = "Hi๐Ÿ‘"
for _8bit in str.utf8 {
	print("\(_8bit)", terminator: " ") // output: 72 105 240 159 145 143
}

 

 

 ๋ฌธ์ž์—ด์˜ ์„œ๋ธŒ์Šคํฌ๋ฆฝํŒ…

 

๋ฌธ์ž์—ด์€ ๋ฐฐ์—ด๊ณผ ๋‹ค๋ฅด๊ฒŒ ์„œ๋ธŒ์Šคํฌ๋ฆฝํŒ…์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค. 

 

"abc haha"๋ผ๋Š” ๋ฌธ์ž์—ด์ด ์žˆ๊ณ  ๋ฌธ์ž๋ฅผ ํƒ์ƒ‰ํ•  ๋–„ ๊ฐ๊ฐ์„ UTF-8 ๊ธฐ์ค€์œผ๋กœ ์ฝ์–ด์•ผํ• ์ง€ UTF-16 ๊ธฐ์ค€์œผ๋กœ ์ฝ์–ด์•ผํ• ์ง€ ๋ช…ํ™•ํ•œ ๊ธฐ์ค€์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ์Šค์œ„ํ”„ํŠธ์—์„œ๋Š” String.Index๋ผ๋Š” ํŠน์ˆ˜ํ•œ ํƒ€์ž…์„ ์ œ๊ณตํ•œ๋‹ค.

 

String.Index๋Š” ๋ฌธ์ž์—ด์˜ ์ธ๋ฑ์Šค ๋ฒˆํ˜ธ์ธ๋ฐ ์žฌ๋ฐŒ๋Š” ์ ์€ ์ด ์ธ๋ฑ์Šค ๋ฒˆํ˜ธ๊ฐ€ ์ •์ˆ˜ํƒ€์ž…์ด ์•„๋‹Œ ๊ฒƒ์ด๋‹ค.

 

์ฆ‰ ๋ฌธ์ž์—ด ๋‚ด์—์„œ ์„œ๋ธŒ์Šคํฌ๋ฆฝํŠธ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•ด์„œ ๊ฐ’์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ด๋Š” ์‹ค์ œ ์„œ๋ธŒ์Šคํฌ๋ฆฝํŠธ๋Š” ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— String.Index๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ ‘๊ทผํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

let str = "abc"
print(str[String.Index(encodedOffset: 0)]) // output: a

 

String.Index๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  encodedOffset์„ ์ธ์ž๋กœ ์ค˜์„œ ์ธ๋ฑ์Šค์— ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์•Œ๊ฒ ๋‹ค.

 

๊ทธ๋Ÿผ ๋ฌธ์ž์—ด์˜ ์ธ๋ฑ์Šค์— ์ ‘๊ทผํ•˜๊ณ  ์‹ถ์„๋•Œ๋Š” ํ•ญ์ƒ String.Index(encodedOffset: )์„ ์‚ฌ์šฉํ•ด์•ผ ํ• ๊นŒ?

 

 

 String.Index ์ƒ์„ฑ

 

๋‹คํ–‰์ด๊ฒŒ๋„ String.Indexํƒ€์ž…์„ ์†์‰ฝ๊ฒŒ ์ƒ์„ฑํ•˜๋Š” ๋ฌธ์ž์—ด ๋ฉ”์„œ๋“œ๋“ค์ด ์žˆ๋‹ค.

 

String.startIndex

String.endIndex

 

String.startIndex๋Š” ๋ฌธ์ž์—ด์—์„œ ์ฒซ๋ฒˆ์งธ ์ธ๋ฑ์Šค์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ’์„ ๊ฐ€์ ธ์˜จ๋‹ค.

String.endIndex๋Š” ๋งจ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค์˜ ๋‹ค์Œ ๋ฌธ์ž(๊ณต๋ฐฑ)๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ ๋•Œ๋ฌธ์— ๋งˆ์ง€๋ง‰ ์ธ๋ฑ์Šค์— ์ ‘๊ทผํ•˜๋ ค๋ฉด String.index(before: )๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ ‘๊ทผํ•ด์•ผํ•œ๋‹ค.

 

let str = "abc"
print(str[str.startIndex]) // output: "a"
let endIndex = str.index(before: str.endIndex)
print(str[endIndex]) // output: "c"

 

 

 ํŠน์ • n๋ฒˆ์งธ ๋ฌธ์ž์—ด์— ์ ‘๊ทผ

 

n๋ฒˆ์งธ ๋ฌธ์ž์—ด์— ์ ‘๊ทผํ•ด์„œ ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๋Š” ๋ฉ”์„œ๋“œ๋กœ String.index(: offsetBy:)๊ฐ€ ์žˆ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด 3๋ฒˆ์งธ ์ธ๋ฑ์Šค๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ์‹ถ๋‹ค๋ฉด str.index(str.startIndex, offsetBy: 2)๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ํŠน์ • ๋ฌธ์ž์˜ ์œ„์น˜๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ์‹ถ๋‹ค๋ฉด

str.index(of: "c")๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

 

 

 ๋ฌธ์ž์—ด์˜ ํŠน์ • ๋ฒ”์œ„๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ

 

startIndex, endIndex, offsetBy๋ฅผ ์ด์šฉํ•ด์„œ ๋ฒ”์œ„๋ฅผ ์„ค์ •ํ•ด์ฃผ๊ณ  

๋ฒ”์œ„ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

 

let str = "Happy"
let start = str.index(after: str.startIndex)
let end = str.index(str.endIndex, offsetBy: -2)
print(str[start...end]) // "app"