Swifter {Swift Developer}

메뉴

7. 문자열

[vc_row][vc_column][vc_column_text]Swift언어는 연산자로 문자열을 조작하는 방법이 쉽습니다. 예로, 문자열 결합을 하고 싶다면, “+”와 “+=”연산자로 간단하게 결합할 수 있지만 Objective-C언어에서는 “stringByAppendingString”메소드를 사용해야 하기 때문에 다른 언어에 비해 직관적인 조작이 가능합니다.

String형은 Foundation프로임웍을 사용할 경우에는 NSString과 연계되어 NSString기능을 사용할 수 있습니다. 현재 String 형은 NSSting함수에 상당히 의존적이기 떄문에 브릿지가 안되어 있다면 함수는 제한됩니다. 그리고 실제 프로젝트에서는 실용적인 측면에서 Foundation 프레임을 통해 문자열 조작을 설명합니다.[/vc_column_text][vc_separator][vc_custom_heading text=”(1) 문자열 리터럴에서 사용할 수 있는 특수문자
” use_theme_fonts=”yes”][vc_column_text]문자열 리터럴은 C언어에서 사용하던 특수문자를 사용할 수 있고 유니코드 문자를 지정할 수 있습니다.

[특수 문자]

  • : NULL
  • \ : 백슬래시문자 “”
  • t : 탭
  • n : 줄바꿈
  • r : 캐리지리턴
  • ” : 큰따옴표 문자 “ “ “
  • ’ : 작은따옴표 문자 “ ‘ “
  • u{n} : 유니코드 문자지정

[/vc_column_text][vc_column_text]

[code lang=”swift”]
let euroSign = "u{20AC}" // 결과: €
let ohmSign = "u{2126}" // 결과: Ω
let sunSign = "u{2600}" // 결과: ☀
let phoneSign = "u{260E}" // 결과: ☎
let rightSign = "u{21E2}" // 결과: ⇢
[/code]

[예제 2-67] 유니코드 사용[/vc_column_text][vc_custom_heading text=”(2) 문자열 결합하기
” use_theme_fonts=”yes”][vc_column_text]문자열의 결합은 다른 언어에 비해 간단합니다. 문자열 결합해서 다른 변수에 넣으려면 “+”연산자와 “+=”연산자를 사용합니다.

[code lang=”swift”]
let str1 = "반갑습니다."
let str2 = "SwiftLAB"
let str3 = str1 + " " + str2
print(str3) // 결과: "반갑습니다. SwiftLAB"

var str4 = "환영합니다 "
str4 += str2
print(str4) // 결과: "환영합니다 SwiftLAB"
[/code]

[예제 2-68] 연산자 문자열 결합

만약, Int형이나 Double형이외의 값은 문자열을 사용하는 경우 문자열 리터럴에서 “(변수명)”을 사용하여 문자열로 변환합니다.

let num = 3
let msg = “(num)”

앞에서 이야기했듯이 문자열을 쉽게 결합할 수 있지만, String형과 Character형을 “+”로 결합할 경우 오류가 발생합니다.
[/vc_column_text][vc_column_text]

[code lang=”swift”]
var phone : String = "02-1111-0000"
let phoneSign : Character = "☎"

phone += phoneSign // 오류

phone.append(phoneSign) // 결과: "02-1111-0000☎"
[/code]

[예제 2-69] 문자열 리터럴을 변수 문자열로 변환[/vc_column_text][vc_custom_heading text=”(3) 문자열 비교하기
” use_theme_fonts=”yes”][vc_column_text]Swift언어는 “==” 연산자를 사용하여 간단하게 문자열 비교를 할 수 있습니다. 다만, 주의해야할 점은 객체가 동일한지를 판단하는 것이 아니라 문자열이 같은지를 판단하는 것을 기억하기 바랍니다.

[code lang=”swift”]
let firstName = "김"
let lastName = "명준"
let name = "명준"

let chk1 = firstName == lastName // 결과: false
let chk2 = firstName == name // 결과: false
let chk3 = lastName == name // 결과: true
[/code]

[예제 2-70] 문자열 비교

그외 문자열 크기 판단도 “>”와 “<”연산자로 가능합니다. 비교 기준은 사전적인 순서를 기준으로 합니다. let han1 = “가” let han2 = “나” let HanChk = han1 > han2 //false
[/vc_column_text][vc_custom_heading text=”(4) 동일 문자 반복하기
” use_theme_fonts=”yes”][vc_column_text]Character형 문자를 지정한 수만큼 연결하여 String형 인스턴스를 만드는 init(count: repeatedValue:) 가 제공됩니다.

 

let msg = String(count: 7, repeatedValue: Character(“한”))[/vc_column_text][vc_custom_heading text=”(5) 빈 변수 확인하기
” use_theme_fonts=”yes”][vc_column_text]문자열이 비어 있는지 확인하려면 isEmpty속성을 참조합니다. 다만, nil은 빈상태로 볼 수 없기 때문에 isEmpty로 확인할 수 없기 때문에 isEmpty로 확인시 오류가 발생하므로 주의해야 합니다.

[code lang=”swift”]
let msg1 = String()
let chk1 = msg1.isEmpty // 결과: true
let msg2 = ""
let chk2 = msg2.isEmpty // 결과: true
let msg3 = "한글"
let chk3 = msg3.isEmpty // 결과: true
[/code]

[예제 2-71] 빈 변수 확인

[/vc_column_text][vc_custom_heading text=”(6) 문자수 얻기
” use_theme_fonts=”yes”][vc_column_text]문자를 얻으려면 characters 속성의 count속성을 사용합니다. 다만 유니코드 문자의 컬렉션이기 때문에 유니코드기반의 문자수를 리턴합니다.

let str = “대한민국”

let cnt = str.charactes.count  // 4[/vc_column_text][vc_custom_heading text=”(7) 시작과 끝 문자열 비교하기
” use_theme_fonts=”yes”][vc_column_text]시작 문자열을 비교하고 싶다면, hasPrefix()메소드를 사용하고 끝 문자열을 비교하고 싶다면 hasSuffix()메소드를 사용합니다.

[code lang=”swift”]
let str = "김명준"
let preChk1 = str.hasPrefix("김") // 결과: true
let preChk2 = str.hasPrefix("명") // 결과: false
let preChk3 = str.hasPrefix("김명") // 결과: true
let sufChk1 = str.hasSuffix("준") // 결과: true
let sufChk2 = str.hasSuffix("명준") // 결과: true
[/code]

[예제 2-72] 문자열 비교[/vc_column_text][vc_custom_heading text=”(8) 알파벳 대소문자 변환하기
” use_theme_fonts=”yes”][vc_column_text]알파벳는 대문자와 소문자로 변환이 가능합니다. 대문자로 변환할 경우 uppercaseSting 메소드를 이용하고 소문자로 변환할 경우 lowercaseStting 메소드를 이용합니다.

let name = “Kim”

let upper = name.uppercaseSting

let lower = name.lowercaseSting[/vc_column_text][vc_custom_heading text=”(9) 숫자로 변환하기
” use_theme_fonts=”yes”][vc_column_text]문자열을 숫자로 변환하고 싶다면 Int 이니셜라이저에 문자열을 넣어서 변환할 수 있습니다. 다만 문자열에 숫자 및 “+”, “-“이외의 문자가 들어가 있다면 nil을 리턴합니다.

let numStr = “12345”

let num = Int(numStr)[/vc_column_text][vc_custom_heading text=”(10) UTF코드 얻기
” use_theme_fonts=”yes”][vc_column_text]Sting에서 한개 단위의 문자로 UTF8과 UTF16코드를 얻는 방법이 있습니다. 얻는 방법은 .utf8 또는 .utf16속성을 사용합니다.

[code lang=”swift”]
var str = "대한민국"
for cnt in str.utf8 {
print("(cnt)")
}

// 결과: 235 140 128 237 149 156 235 175 188 234 181 173
[/code]

[예제 2-73] UTF8 코드 얻기

만약, 유니코드 스칼라값을 얻고자 한다면 .unicodeScalars 속성을 이용하면 얻을 수 있습니다. 위 예제에서 str.unicodeScalars로 변경해서 테스트해 봅시다. 그리고 유니코드 스칼라값을 다시 문자열로 만들려면 아래와 같이 사용할 수 있습니다.

Sting (UnicodeScalar(변환할 유니코드스칼라값))[/vc_column_text][vc_custom_heading text=”(11) 문자열 색인하기
” use_theme_fonts=”yes”][vc_column_text]String의 Character형에 접근하려면 인덱스(Sting.Index형)을 사용합니다. 인덱스를 검색할 속성은 시작 문자 인덱스를 얻기 위한 startIndex속성과 끝문자 인덱스를 얻는 endIndex속성이 있습니다. 또한 인덱스를 앞뒤로 이동할수도 있고 특정 부분의 인덱스로 이동하는 함수도 있습니다. 다음 인덱스를 얻으려면 successor()메소드를 사용하고 이전 인덱스를 얻으려면 predecessor()메소드를 사용합니다. 지정한 위치에 인덱스를 이동시키고 싶다면 advancedBy(n)메소드를 사용합니다.

주의해야할 점은 인덱스의 이동범위는 startIndex에서 endIndex까지입니다.  참고로 endIndex속성은 마지막 문자의 인덱스가 없기 때문에 마지막 문자를 리턴하려면 endIndex와 predecessor()메소드를 조합해서 사용해야 합니다.

[code lang=”swift”]
let str = "ABCDEFG"

str[str.startIndex] // 결과: A
str[str.startIndex.successor()] // 결과: B
str[str.endIndex.predecessor()] // 결과: G
str[str.startIndex.advancedBy(3)] // 결과: D
[/code]

[예제 2-73] UTF8 코드 얻기

만약, characters속성의 indices속성으로 인덱스 범위를 얻는 방법도 있습니다.

for idx in str.characters.indices {
print(str[idx])
}
[/vc_column_text][/vc_column][/vc_row]

Facebook Comments

카테고리:   Swift Books

댓글

죄송하지만 댓글은 닫혀 있습니다.