Skip to content

Latest commit

 

History

History
executable file
·
72 lines (42 loc) · 3.42 KB

스위프트-2.문자열.md

File metadata and controls

executable file
·
72 lines (42 loc) · 3.42 KB

[스위프트 대충보기] 2. 문자열/문자

  • 문자열: String 타입. Character 타입의 컬렉션

  • 유니코드

  • 각 문자열은 인코딩에 무관한 유니코드 문자로 내부 구성하며, 필요에 따라 빠르게 여러 유니코드 표현을 만들어냄(뭐..그렇다네요..)

  • NSString과(NS는 NextStep의 NS. 넷스케이프와는 관련 없음 ^^) 매끄럽게 연결(스칼라와 자바냐? 물론 안그랬다면 원성이 자자했겠지만). NSString API 함수에 스위프트 문자열을 넘겨도 OK. 스위프트 스트링은 모든 NSString 메서드를 지원

  • 스트링 리터럴: "당연히 큰따옴표사이에"

  • 이스케이프: \0, \, \t, \n, \r, ", '

  • 8비트 유니코드: \xnn (n:16진숫자 하나)

  • 16비트 유니코드: \unnnn

  • 32비트 유니코드: \Unnnnnnnn

  • 빈 스트링: "" 또는 String()

  • str.isEmpty 로 비어있나 체크 가능

  • 변수(var로 선언)인 스트링은 += 등으로 변경 가능, 상수(let으로 선언)인 스트링은 변경하면 컴파일타입 오류

  • 문자열은 값타입(Value Type)임: 즉, 기본적으로 문자열 전달시 복사에 의한 전달을 한다는 것에 유의. 따라서 함수에서 문자열을 받으면 그 문자열은 함수안에서만 쓰이는 복사본임. 물론 성능 문제가 있으므로, 컴파일러가 최적화해서 실제 복사가 꼭 필요할 때만 복사를 함.

  • for c in "문자열" { println(c) } 처럼 스트링을 Character의 시퀀스로 사용 가능

  • 한문자짜리 문자열을 Character 타입 변수에 대입할 수 있음.

let dot: Character = "."

  • 문자열 길이는 countElements 를 사용해 셀 수 있음.

let helloWorld = "헬로월드" println("'헬로월드'는 = (countElements(helloWorld)) 글자임.")

  • (주의) 유니코드 특성상, 정확한 길이를 알기 위해서는 모든 문자를 이터레이션해야 하므로 긴 문자열을 시간이 오래걸릴 수 있음. 마찬가지로 NSString의 length(UTF-16으로 인코딩한 스트링의 16비트 문자 개수)와 countElements의 결과도 다를 수 있음

  • +로 문자열+문자열, 문자열+문자, 문자+문자, 문자+문자열 붙이기(concatenation) 가능

  • 인터폴레이션: ()안에 식을 넣으면 됨. 다만 괄호 사이에 이스케이프 없는 큰따옴표(")나 백슬래시(), 뉴라인문자(CR,LF)를 넣을 수 없음

  • 문자열 비교는 strVar1 == strVar2 과 같은 식으로 함

  • hasPrefix, hasSuffix let x = "프레픽스본문자열서픽스" let y = "프레픽스" let z = "서픽스"

x.hasPrefix(y) // true x.hasPrefix(z) // false x.hasSuffix(y) // false x.hasSuffix(z) // true

  • str.uppercaseString, str.lowercaseString : 대문자화, 소문자화. 기존 문자열을 업데이트 하는게 아니라, 새 문자열 반환

  • 유니코드 처리(제대로 설명하고 싶지만 빈칸이 부족... ^^)

str.utf8 : utf8 str.utf16 : utf16 str.unicodeScalars : 21비트 유니코드 스칼라(UnicodeScala타입). UnicodeScala의 value프로퍼티를 사용해 21비트 값을 읽을 수 있음(UInt32)

for scalar in dogString.unicodeScalars { print("(scalar.value) ") }

감상: 그냥그냥. 어차피 여기서도 그리 뭔가 딴짓을 할 여지는 적음. 유니코드는 편해 보이긴 함. 우리나라 같은 경우 EUC-KR처리가 문제인데 이건 결국 NSString에다가 구겨넣어서 다시 String으로 가져와야 할려나?

오늘은 여기까지... ^^