🍎swift
Swift - 문자열 다루기 01
Kendrick
2023. 3. 29. 01:21
01 문자열은 배열일까?
배열에서 Index의 값을 뽑아내는 방법은 서브스크립트 문법을 사용하여 해당 인덱스 값을 반환할 수 있다.
var array = [1,2,3,4,5]
array[1] //2
문자열은 기본적으로 Collection Type이다 즉 Character 타입으로 이루어진 데이터 바구니에 담겨져 있다고 생각 할 수 있다.
하지만 위와 같이 Index를 반환하는건 불가능하다.
02 String타입의 메모리 저장 구조
Int타입,정수 형태의 배열의 저장구조는 일정한 메모리안에 일정한 간격으로 저장이 가능하지만
String타입은 일정하지 않은 간격으로 데이터가 존재한다 예를 들면 다음과 같다
var string = "한"
//데이터(ㅎ+ㅏ+ㄴ)
"한"이라는 데이터는 ㅎ+ㅏ+ㄴ으로 메모리상에 저장되지만 하나의 글자인 "한"으로 자동으로 인식한다.
따라서 인덱스 값을 반환할 때 정수 형태의 배열과 같이 정수값으로 Index반환이 불가하다.
03 String(문자열) -> 배열화
String타입은 [String] 타입으로 배열화가 가능하다.
1. map을 활용
var someString = "Steve"
var array = someString.map { String($0) }
print(array) //["S", "t", "e", "v", "e"]
2. 직접적으로 배열에 담기
var newArrat = Array(someString)
print(newArrat) //["S", "t", "e", "v", "e"]
newArrat[2] //"e"
04 배열 -> 문자열화
joined()메서드를 활용해서 배열을 문자열화 할 수 있다.
//문자열 -> 배열
var someString = "Steve"
var array = someString.map { String($0) }
print(array) //["S", "t", "e", "v", "e"]
array[0] //"S"
//배열 -> 문자열
var newString = array.joined()
print(newString) //Steve
04 활용예시
joined메서드 외 많은 메서드들이 존재하며, 이를 활용해 다양한 시도를 해볼 수 있다.
var someString = "korea"
// 문자열을 섞어보자
// 문자열을 섞기 위해 필요한 과정
// 1. 각각의 인덱스 필요 -> 배열로 만들기
someString.map { String($0) }
//2. 배열로만든 뒤 각각의 인덱스를 섞기
//someString.map { String($0) }.shuffle()
//3. 원하는건 문자열 -> 배열을 문자열로 만들기
var newText1 = someString.map { String($0) }.shuffled().joined()
var shufflText = someString.map {String($0)} .shuffled()
print(shufflText) //["o", "k", "r", "a", "e"] ...랜덤하게 섞여서 나옴
var shufflText1 = someString.map {String($0)}.shuffled().joined()
print(shufflText1) //aroke ...랜덤하게 섞여서 나옴
05 문자열 연산
swift는 대문자와 소문자를 다르게 인식하고, 연산이 가능하다.
//swift는 대문자와 소문자를 다르게 인식함. 전체적인 구조를 바꿔줄 수 있음
var string = "apple,swift"
string.lowercased() //"apple,swift"
//전체 소문자로 변경
string.uppercased() //"APPLE,SWIFT"
//전체 대문자로 변경
string.capitalized //"Apple,Swift"
//앞글자만 대문자로 변경
//비교도 가능하다.
if string == string.uppercased() {
print("1")
} else if string == string.lowercased() {
print("2")
} else {
print("3")
} //2
"apple,swift" == "Apple,swift" //false
"apple,swift".lowercased() == "apple,swift" //true
//공백도 문자열이다. 즉 빈문자열과 공백문자열은 다르다.
var empty = ""
empty.count //0, nil은아님
empty.isEmpty //true
var empty1 = " "
empty1.count //1
empty1.isEmpty //false
06 String(문자열) 인덱스 타입
문자열은 서브스크립트 문법으로 인덱스 타입에 접근할 수 있다.
let someString = "Swift! iOS"
//문자열 인덱스 접근
someString.startIndex
someString[someString.startIndex] //"S"
// 문자열의 첫 번째 문자에 접근
let firstChar = someString[someString.startIndex]
print(firstChar) // "S"
// 문자열의 마지막 문자에 접근
let lastIndex = someString.index(before: someString.endIndex)
let lastChar = someString[lastIndex]
print(lastChar) // "S"
// 문자열의 두 번째 문자에 접근
let secondIndex = someString.index(after: someString.startIndex)
let secondChar = someString[secondIndex]
print(secondChar) // "w"
// 문자열의 네 번째 문자에서 세 칸 뒤에 있는 문자에 접근
let fourthIndex = someString.index(someString.startIndex, offsetBy: 3)
let seventhChar = someString[someString.index(fourthIndex, offsetBy: 3)]
print(seventhChar) // "i"
07 문자열 for문 활용
let someString = "Swift!iOS"
for index in someString.indices { // 문자열 각각의 인덱스에 접근
print("\(someString[index])", terminator: ".")
} //S.w.i.f.t.!.i.O.S.