나의 발자취

Swift Notes for Professionals PDF (1) 문자열 본문

앱 개발/iOS

Swift Notes for Professionals PDF (1) 문자열

달모드 2024. 9. 19. 10:46

Reversing Strings 

문자열 거꾸로 하는 방법: .characters.reversed() 를 쓴다.

let aString = "This is a test string."
let reversedCharacters = aString.characters.reversed()

 

 

String contains Characters from a Defined Set

특정 문자열 안에서 캐릭터 찾기

let letters = CharacterSet.letters
let phrase = "Test case"
let range = phrase.rangeOfCharacter(from: letters)
// range will be nil if no letters is found
if let test = range {
   print("letters found")
}
else {
   print("letters not found")
}

 

let phrase = "Test case"
let charset = CharacterSet(charactersIn: "t")
if let _ = phrase.rangeOfCharacter(from: charset, options: .caseInsensitive) {
   print("yes")
}
else {
   print("no")
}

 

 

String Iteration 

문자열 순회: Swift 3 부터는 .index(after: ), .index(before: ), .index(_:, offsetBy:) 메서드들이 있다. 그리고 Index와의 혼동을 방지하기 위해서 currentIndex를 인덱스로 사용한다.

let string = "My fantastic string"
var currentIndex = string.startIndex
while currentIndex != string.endIndex {
    print(string[currentIndex])
    currentIndex = string.index(after: currentIndex)
}

 

또는 for 문을 써서 순회할 수 있지만 이것은 문맥에 맞게 사용해야 한다.

for c in string.characters {
    print(c)
}

 

 

offsetBy: 인자를 음수로 두게 되면 거꾸로 순회할 수 있다.

currentIndex = string.index(string.startIndex, offsetBy: 2)

 

그리고 만약 string의 bound를 초과할 것 같으면, 한도를 설정할 수 있다.

currentIndex = string.index(string.startIndex, offsetBy: 20, limitedBy: string.endIndex)

 

 

Split a String into an Array

let startDate = "23:51"
let startDateAsArray = startDate.components(separatedBy: ":") // ["23", "51"]

 

 

16진법 수 사용하는 법

Swift에서 Character 타입은 여러 유니코드로 조합되어 하나의 문자로 나타날 수 있다. 이것을 Extended Grapheme Cluster 라고 부른다.

var str: String = "\\u{61}\\u{5927}\\u{1F34E}\\u{3C0}" // a大π
var character: Character = "\\u{65}\\u{301}" // é = "e" + accent mark

 

 

String을 Data/NS Data 형식으로 변환하는 법

String -> Data/NS Data

let data = string.data(using: .utf8)

 

Data/NS Data -> String

let string = String(data: data, encoding: .utf8)

 

 

Formatting Strings

Leading Zeros - 0를 여백으로 채워넣기

let number: Int = 7
let str1 = String(format: "%03d", number) // 007
let str2 = String(format: "%05d", number) // 00007

 

Numbers after Decimal

import Foundation

let number: Float = 3.14159
let str1 = String(format: "%.2f", number) // 3.14
let str2 = String(format: "%.4f", number) // 3.1416 (rounded)

 

 

대소문자 변환

let text = "AaBbCc"
let uppercase = text.uppercased() // "AABBCC"
let lowercase = text.lowercased() // "aabbcc"

 

Decimal. Format Style

import Foundation

let number: Decimal = 3.14159
let formattedNumber = number.formatted(.number)  // "0.1"

let formattedPercent = number.formatted(.percent)  // "10%"

let formattedCurrency = number.formatted(.currency(code: "USD"))  // "$0.10"


let number2: Float = 3.14159
let str1 = String(format: "%.2f", number2) // 3.14
let str2 = String(format: "%.4f", number2) // 3.1416 (rounded)

https://developer.apple.com/documentation/foundation/decimal/formatstyle

 

통화단위 (Foundation)

https://developer.apple.com/documentation/regexbuilder

import Foundation

let number: Decimal = 3.14159
let formattedNumber = number.formatted(.number)
// formattedNumber is "0.1"


let formattedPercent = number.formatted(.percent)
// formattedPercent is "10%"


let formattedCurrency = number.formatted(.currency(code: "USD"))
// formattedCurrency is "$0.10"

 

통화단위 Regex (RegexBuilder)

https://developer.apple.com/documentation/regexbuilder

import RegexBuilder

let source = "Payment due: $49,525.99"
let matcher = Regex {
    OneOrMore(.any)
    ": "
    Capture {
        One(.localizedCurrency(code:Locale.Currency("USD"),
                               locale:Locale(identifier: "en_US")))
    }
}
let match = source.firstMatch(of: matcher)
let localizedDecimal = match?.1 // 49525.99

 

 

Removing leading and trailing WhiteSpace and NewLine

import Foundation

let someString = " Swift Language \n"
let trimmedString = someString.trimmingCharacters(in: .whitespacesAndNewlines)
// "Swift Language"
let trimmedWhiteSpace = someString.trimmingCharacters(in: .whitespaces)
// "Swift Language \n"
let trimmedNewLine = someString.trimmingCharacters(in: .newlines)
// " Swift Language "

 

 

 

Comments