String
: Character 타입(문자) 값의 집합을 표현한 것, 구조체, 값 형식
NSString
: 클래스, 참조 형식
💡 String과 NSString는 타입캐스팅으로 서로 호환된다.
문자열 리터럴은 상수나 변수의 초기 값을 사용할 수 있도록 한다.
let someString = "Some string literal value"
빈 문자열은 String 인스턴스를 초기화 하거나 빈 문자열 리터럴 값을 변수에 할당한다.
isEmpty 속성으로 빈 문자열인지 확인 가능하다.
var emptyString = "" // 빈 문자열
var anotherEmptyString = String() // 초기화 구문
if emptyString.isEmpty {
print("빈 문자열")
}
// 출력값: 빈 문자열
let str = "Hello"
print(str.count) // 출력값: 5
let repeatStr = String(repeating: "😀", count: 2)
print(repeatStr)
// 출력값: 😀😀
// 문자열 비교하기
str == "Apple"
"apple" != str // true
"apple" < str // false, 아스키코드 참고
// 숫자 123을 16진수 문자열로 바꾸는 것
let hex = String(123, radix: 16)
str.lowercased() // 모든 문자를 소문자로 바꾸기
str.uppercased() // 모든 문자를 대문자로 바꾸기
str.capitalized // 첫번째 글자 대문자로, 나머지 소문자로 바꾸기
// 문자 반복하기
for char in "Hi" {
print(char)
}
// 출력값 : H
// i
let num = "123456789"
num.randomElement() // 랜덤 문자열
num.shuffled() // 문자열 섞기
String(format: "%d", 12)
// 출력값: "12"
// d, D: 정수 대체
String(format:"[%10d]", 123)
// 출력값: [ 123]
String(format:"[%-10d]", 123)
// 출력값: [123 ]
String(format: "%d%%", 123)
// 출력값: 123%
//%를 사용하고싶으면 %% 두개를 붙여서 사용해야함
String(format: "Hello, %@", "Swift")
// 출력값: "Hello, Swift"
// @: 문자열, 참조형식 대체
let firstName = "hansol"
let lastName = "Lee"
// 각 인수를 받아서 사용 가능 ($1, $2)
let korFormat = "내 이름은 %2$@ %1$@"
let engFormat = "My name is %@ %@"
String(format: korFormat, firstName, lastName)
String(format: engFormat, firstName, lastName)
// 내 이름은 hansol Lee
// My name is hansol Lee
let Num1: Float = 12.123
let Num2: Float = 45.456
// 변화를 확인하기 위해 []로 구분을 지어줌, 사용 시 [] 제거!
String(format:"[%f]", Num1)
// 출력값: [12.123000]
// 소수점 첫 째 자리까지 출력
String(format:"[%.1f]", Num1)
// 출력값: [12.1]
// 소수점 둘 째 짜리까지 출력
String(format:"[%.2f]", Num1)
// 출력값: [12.12]
// 문자의 길이는 10개, 소수점 둘 째 짜리 출력 (오른쪽 정렬)
String(format:"[%10.2f]", Num1)
// 출력값: [ 12.12]
// 문자의 길이는 10개, 소수점 둘 째 짜리 출력 (왼쪽 정렬)
String(format:"[%-10.2f]", Num1)
// 출력값: [12.12 ]
// 문자의 길이는 10개, 공백을 0으로 채움, 소수점 둘 째 자리까지 출력
String(format:"[%010.2f]", Num1)
// 출력값: [0000012.12]
// 여러 인수 사용가능
String(format:"[%.1f, %.1f]", Num1, Num2)
// 출력값:[12.1, 45.5]
// 만약 첫 번재 인수와 두 번째 인수와 위치를 바꿔주려면
// 1$(첫 번째 인수), 2$(두 번째 인수)를 사용하여 위치를 변경이 가능.
String(format:"[%2$.1f, %1$.1f]", Num1, Num2)
// 출력값: [45.5, 12.1]
String literal 안에서 특별하게 해석되는 단일문자 혹은 문자열이다.
Swift에서는 백슬래시\
를 사용한다.
var str = "\\"
print(str)
// 출력값: \
// 문자열리터럴에 백슬래쉬는 `\` 단독으로 사용 불가능, 두개 연속으로 써야함
print("A\tB")
// \t: tap
// 출력값: A B
print("A\nB")
// \n: 줄바꿈
// 출력값: A
// B
print("\"Hello\", hansol")
// 출력값: "Hello", hansol
Extended String Delimiters를 사용하면 raw string literal를 나타낼 수 있게 된다.
#"String literal"#
print(#""Hello" he said."#)
// 출력값: "Hello" he said.
print(#""Hello"\n he said."#)
// 출력값: "Hello" \n he said.
// 기존의 탭이나 줄바꿈 문자를 그대로 사용하려면 Escape Sequance로 인식시켜야함.
print(#""Hello"\#n he said."#)
// 출력값: "Hello"
// he said.
let value = 123
print(#"The value is \(value)."#)
// 출력값: The value is \(value).
print(#"The value is \#(value)."#)
// 출력값: The value is 123.