@frozen struct String
(@frozen은 구조체, 열거형 타입에 사용할 수 있는 attribute로서 해당 타입에 대한 변화를 제한하는 것이다.)
애플에선 String을 Character의 collection이라고 표현한다. (여기서 collection은 array, set, dictionary를 의미하는게 아니라 말 그대로 모아 두었던 그룹, 대상
을 의미한다)
String은 correct
와 locale
에 큰 영향을 받지 않는(insensitive) Unicode로서 Object-C의 NSString타입과 호환(bridges with)될 수 있으며 C 함수와 동작가능한 방법을 제공한다. (String문서의 하단부에 Converting a C String
에서 확인할 수 있다.)
잠깐!
여기서 correct와 locale에 insensitive하다는 것은 무엇일까?
Unicode-correct
: Swift의 strings 은Unicode standard
, 즉 유니코드 표준을 따르며(conform) 이는 곧 Swift의 문자가(strings) 프로그래머가 예상한대로 동작할 것임을 의미한다.
하지만 대소문자, 순서정렬(sotring)에 관해
Unicode
는 미리 많은 규칙을 정해두었다. 이 규칙들은 대부분의 경우 context( locale, string이 사용 혹은 게시되는 언어나 지역)에 따라 달라진다.
- Swift의 string이
locale-insensitive
하다는 것은 Swift는 이런 locale-specific한 규칙들을 제공하지 않는다는 것이다.- 따라서
context
에 따라 strings이 변경되어야 한다면(혹은 적절히 반응해야 한다면) String타입에 extension을 이용해 method를 구현하거나 localizedUppercase, localizedLowercase등을 사용해야한다.
스위프트에서 String타입의 변수(상수)를 생성하기 위해선 쌍따옴표("
)를 이용하면된다.
첫 번째는 쌍따옴표 사이 원하는 글자를 입력하거나,string interpolation
= \()
을 사용할 수 있다.
let greeting = "Welcome!"
let name = "Rosa"
let personalizedGreeting = "Welcome, \(name)!"
// personalizedGreeting == "Welcome, Rosa!"
let price = 2
let number = 3
let cookiePrice = "\(number) cookies: $\(price * number)."
// cookiePrice == "3 cookies: $6."
+
연산자를 이용해 문자열끼리 합치는 것도 가능하다.
let longerGreeting = greeting + " We're glad you're here!"
// longerGreeting == "Welcome! We're glad you're here!"
여러 줄 인경우 double quotation marks("""
)를 이용한다. 들여쓰기(indentation)는 닫는 부분의 mark를 기준으로 정해진다.
let banner = """
__,
( o /) _/_
`. , , , , // /
(___)(_(_/_(_ //_ (__
/)
(/
"""
//출력문![]
/*
__,
( o /) _/_
`. , , , , // /
(___)(_(_/_(_ //_ (__
/)
(/
*/
여기까지 String은 어떻게 구현되어있고 어떻게 선언하는지에 관한 것이었다. 다음 글에선 변경(Modifying)되고 비교(Comparing)하고 있는지 알아보자.