Hello, world
우리는 이걸 문자열이라고 인식할 수 있지만 스위프트에서는 문자열이 아닙니다.
"Hello, world"
스위프트에서 문자열은 이렇게 큰따옴표로 감싸야 합니다.
문자열은 항상 String 타입으로 추론됩니다.
문자열 리터럴은 2가지가 있습니다.
Singleline String Literal : 하나의 큰 따옴표로 시작해서 하나의 큰 따옴표로 끝납니다.
Multiline Literal은 " " " 큰따옴표 3개로 시작합니다.
let multiline = """
asdfkjlwejrlkwnea,mrn,swamnlm,fsanlksewjlrfjlkewsldsaf
"""
또한 큰따옴표 3개랑 같은 라인에 있으면 안됩니다.
예제처럼 아래로 한칸 내려야 합니다.
또한 마지막도 큰따옴표가 문자열 뒤에 붙는게 아니라
한칸 줄바꿈을 하여 " " " 를 적어야 합니다.
스위프트에는 문자열 타입이 2개 있습니다.
String Type
스트링은 구조체로 구성되어 있고 간편식이라는걸 외워둬야 합니다.
만약 문자열을 참조열로 구성하고 싶으면
Foundation String 을 사용하면 됩니다.
이 두가지 문자열 타입은 호환되며
언제든지 바꿔서 사용 가능합니다.
이 기술의 이름을 Toll-free Bridged Types 라고 합니다.
애플 프레임워크에서 자주 사용하는 기술 입니다.
vart nsstr: NSString = "str"
let swiftStr: String = nsstr as String
nsstr = swiftStr as NSSstring
첫번째는 파운데이션 문자열에 문자열리터럴을 저장한 것입니다.
두번째는 ns 스트링을 스트링으로 저장한 것입니다.
Mutability
문자열의 가변성에 대해서 복습하겠습니다.
문자열의 가변성은 let 키워드와 var 키워드로 결정됩니다.
Character Type
"C"는 문자열로 저장이 됩니다.
큰따옴표에 저장된 값은 어떤 값 이든간에 문자열로 저장이 됩니다.
만약 "C" 를 문자로 선언하고 싶다면
let c: Character = "C"
라고 선언해야 합니다.
string Interpolation
파일 사이즈를 문자열로 출력한다고 가정해 보겠습니다.
var str = "12.34Kb"
이렇게 하면 문자열이 고정되니까 다른 사이즈를 넣을 수 없습니다.
let size = 12.34
str = Strint(size) + "KB"
그냥 size + "kb"를 하면 실수와 문자열은 바로 연결할 수 없기 때문에
String으로 size의 타입을 일치시켜 합니다.
이제 값을 바꾸면 문자열도 값에 맞게 바뀌게 됩니다.
하지만 이렇게 하는경우는 별로 없고
보통 string interpolation 을 사용합니다.
let size = 56.78
str = "\(size)KB"
이렇게 문자열 표현식 안에서 \(expr) 이라는 문법 순서로 진행합니다.
컴파일 하면 결과는 같은데 코드가 훨씬 단순합니다
만약 상세한 포멧팅이 필요하다면
문자열 지정자와 포멧 지정자를 사용해야 합니다.
Format Specifier
%char
포멧 지정자가 포함된 문자열을 포멧 문자열 이라고 부릅니다
String(format: "%.5fKB", size)
String(format:"Hello, %@"// 문자열과 참조형식을 대체합니다 , "Swift")
String(format:"%d"//정수를 대체합니다,12)
//다만 %d는 정수만 대체할 수 있습니다. 12. 34 라는 실수를 전달하면 정수부분만 출력됩니다.
String(format:"%f"//실수를 대체합니다,12.34)
//출력하면 12.340000 라고 나옵니다. 자릿수를 지정해 줘야 합니다.
STring(format:"%.3f",12.34)
//출력하면 12.340이라고 나옵니다
Escape Sequence
이번에는 포멧팅에서 많이 사용되는 Escape Sequence 입니다.
문법은
\char
입니다.
str = "\\"
문자열에서 \ 하나는 입력할 수 없습니다.
\을 표현하고 싶다면 \\ 이런식으로 2개를 적어야 합니다.
위의 코드를 print로 출력해보면 \ 하나만 나오게 됩니다.
이런 문자를 Escape Sequence 라고 합니다.
번역하면 탈출 문자 입니다ㅣ.
자주사용하는 이스케이프 시퀀스 예제를 보겠습니다.
print("A\tB")
여기서 \ 가 이스케이프 시퀀스 이고 t 가 탭 입니다.
출력해보면 A B 이런식으로 출력이 됩니다.
Extended String Delimeters
문법은
#"charSequence"#
입니다.
이 문법을 적용한 예제를 보겠습니다.
#"\"HEllo\" he said. "#
이렇게 컴파일 하면 \ 까지 같이 출력되는걸 확인할 수 있습니다.
이런 문법을 Row String이라 하며 \ 와 따옴표를 문자 그대로 처리합니다.
String Index
let str = "swift"
이 코드에서 첫번째 문자 S 의 인덱스는 0 입니다 .
다른언어에서는 이게 맞는데
스위프트에서는 문자열 인덱스가 정수가 아닙니다.
첫번째 문자의 인덱스는
str.startIndex
위의 코드로 얻을 수 있습니다.
위의 코드의 타입을 보면 int 가 아닌 string.index 라고 되어있습니다.
또한 타입이름에 . 이 추가되어있는데 이건 오타가 아니라
Nested Type 이라 해서 내포된 형식 입니다.
이번에는 첫번째 문자열을 출력하겠습니다.
특정 문자에 접근할 때는 서브스크립트 문을 사용합니다.
let firstCh = str[str.startIndex]
print(firstCh)
다음 예제는 마지막 문자열을 출력하겠습니다.
elt lastCh = str[str.endIndex]
print(lastCh)
이대로 출력하면 아까랑은 다르게 에러가 발생합니다.
에러 내용을 보면 string index is out of bounds 스트링 인덱스가 범위를 벗어났다고 합니다.
여기서의 endIndex는 마지막 문자가 아니라 그 다음의 인덱스 입니다.
마지막의 다음 입니다. 영어로는 past the end 라고 부릅니다.
해결하려면 index(before:)라는 키워드를 사용해야합니다.
let lastCharIndex = str.index(before: str.Index)
let lastCh = str[lastCharIndex]
print(lastCh)
string Initialization
새로운 문자열을 만드는것부터 시작하겠습니다.
가장 쉬운 방법은 문자열 리터럴을 만드는 것 입니다.
var str = "Hello, Swift String"
var emptySTr= ""
emptyStr = string()
다른 타입의 값을 문자열로 만들 수 있습니다.
let a = string(true)
이번에는 숫자를 특정 진법으로 바꿔보겠습니다.
let hex = string(123, radix: 16)
이 코드는 숫자 123을 16진수로 바꾸는 코드 입니다.
특정문자를 반복해야하는경우
let repeatStr = String(repeating:"a",count:7)
이런식으로 만들게 됩니다.
문자열의 길이를 확인해 보겠습니다.
str.count
str.count == 0
str.isEmpty
이 코드는 문자열이 비어있는지 확인하는 코드 입니다.
문자열을 비교할때는 비교 연산자를 사용하게 됩니다.
str == "apple"
"Apple" !="apple"
'기초' 카테고리의 다른 글
Homebrew 설치하기 (0) | 2024.09.01 |
---|---|
13.string Editing (0) | 2024.06.02 |
11.Functions & Closures (1) | 2024.06.02 |
10.Optionals (0) | 2024.06.02 |
9.control Tranfer Statements (0) | 2024.06.02 |