+ String
- let으로 선언된 문자열은 NSString, var로 선언된 문자열은 NSMutableString과 동일
- String을 var로 선언한 경우에는 다양한 연산자와 메소드를 통해 문자열을 변경할 수 있음, 변경 과정에서 메모리 공간이 부족해지면 변경된 문자열을 모두 저장할 수 있는 새로운 메모리 공간을 할당, Exponential growth 전략이라고도 함, 새로운 메모리 공간을 할당할 때마다 이전보다 두 배 이상 큰공간을 할당, 이러한 작업은 성능에 영향을 줌
- Objective-C와 Swift 모두 사용할 수 있는 NSString과 달리 String은 Swift에서만 사용
* 문자열 생성
- let str = "" //공백문자열
- let str = String() //공백문자열
- let str = "Swift String"
- let str = String(stringLiteral: "Swift String")
- let str = NSString(string: "Swift String")
* 문자 생성
- 문자열과 리터럴 표형 방식 동일
- 문자를 생성할 때 반드시 Character 자료형을 명시적으로 지정해야 함
- let ch: Character = "A"
- let ch: Character = "AA" //Error - Character 지정 후 두 개 이상의 문자를 포함하고 있어 에러
- let ch = Character("A")
- let ch: Character = " " //하나의 공백 문자
- let ch = Character (" ") //하나의 공백 문자
* 문자열 길이 확인
- NSString으로 선언하였을 경우
let str: NSString = "Swift String"
print(str. length)
- String 문자열 길이를 확인할 때는 가장 범용적인 characters 속성을 통해 얻을 수 있음
let str = "Swift"
print(str.characters.count)
- String 문자열은 isEmpty 속성으로 비어있는 문자열을 확인 할 수 있음
let str = "Swift"
if str.isEmpty {
//........
}
* 문자열 비교
let aString: NSString = "Apple"
let bString = "Orange"
let cString = "apple"
- isEqual (대소문자 구분함)
if aString.isEqual(to: bString) {
print("Equal")
} else {
print{"not Equal")
}
// not Equal
- compare (대소문자 구분, 리턴형이 NSComparisonResult, 사전 정렬 순서를 표현 가능(코드값 기준))
let result = aString.compare(bString)
switch result {
case .orderedAscending :
print("ASC")
case .orderedSame :
print("SAME")
case .orderedDescending :
print("DESC")
}
- caseInsensitiveCompare (대소문자 구분하지 않음)
if (aString.caseInsensitiveCompare(bString) == ComparisonResult.orderedSame) {
print("Equal")
} else {
print("not Equal")
}
- ==, != 연산자를 통하여 비교할 수 있음
- <, <=, >, >= 연산자가 compare 메소드를 대신하여 사용 할 수 있음
if aString == bString {
//...
} else if aString < cString {
//...
} else {
//....
}
* 문자열 다양한 범위 비교 대상 지정
- compare(_:options:range)
' 비교범위를 Range<Index> 형태로 전달
' options 파라미터에는 빈옵션을 전달 시 0 대신 []을 전달, Swift에서 빈옵션은 []로 나타냄
let compStringA = "Swift 3.0"
let compStringB = "Swift"
var result = compStringA.compare(compStringB)
print(result.rawValue)
let compareRange = compStringB.startIndex ..< compStringB.endIndex
result = compStringA.compare(compStringB, options: [], range: compareRange)
print(result.rawValue)
- hasPrefix, hasSuffic
' 접두어와 접미어를 비교
' 대소문자를 구분, 대소문자 구분이 필요하지 않은 시 compare(_:options:range) 메소드를 NSStringCompareOptions.CaseInsensitiveSearch 옵션과 함께 사용해야 함
let hasString = "Swift"
if hasString.hasPrefix("Swi") {
print("ok")
}
if hasString.hasSuffix("Programming") {
print("ok")
}
let compareHasRange = hasString.startIndex ..< hasString.index(hasString.startIndex, offsetBy: 4)
let hasResult = hasString.compare("swi", options: [.caseInsensitive], range: compareHasRange)
print(hasResult.rawValue)
* 문자열 연결
- NSString 자료형 명시
let str1: NSString = "Swift"
let str2 = str1.appending(" Programming")
print(str2)
let str3 = str1.appendingFormat(" %.1f %@", 3.0, "Programming")
print(str3)
- NSMutableString 자료형 명시
let strMS = NSMutableString(string: "Swift")
strMS.append(" Programming")
print(strMS)
strMS.setString("Swift")
strMS.appendFormat(" %.1f %@", 3.0, "Programming")
- String 문자열
' 메소드를 사용하지 않음
' +, += 연산자를 활용하여 두 문자열을 연결
let strString = "Swift" + " Programming"
print(strString)
var strVar = "Swift"
strVar += " Programming"
print(strVar)
' String Interpolation
let version = 3.0
let strSI = "Swift \(version) Programming"
print(strSI)
' String 문자열을 var로 선언하면 NSMutableString에서 제공하는 유사한 메소드를 사용할 수 있음 (append(_:)문자를 appending(_:)는 문자열을 연결할 때 사용, 그 외 appendingFormat(_:)도 존재)
var strAppend = "Swift"
strAppend.append("!")
print(strAppend)
strAppend.appending(" Programming")
print(strAppend)
문자관련해서는 봐야할 것도 많고 자주 사용않으면 잊어버리게 되니 자주 찾아 보게 될거 같다.
인덱싱이나 추출 등은 차 후 업데이트 하도록 하겠다.
Todo...