String의 프로퍼티 및 메서드
Swift를 사용해오면서 우리는 지금까지 많은 String
을 사용해왔고, Swift에서 Stirng
은 Struct
라는것을 알게 되었습니다. 그리고 이 String
에는 자체 메서드
와 프로퍼티
를 가지고 있습니다.
let string = "서근 개발 노트 블로그 입니다."
1. Count
count
프로퍼티를 사용하여 문자열의 문자 개수를 셀 수 있습니다.
print(string.count)
//17
var toys = ""
if toys.count == 0 {
print("아무것도 들어있지 않습니다.")
}
//아무것도 들어있지 않습니다.
2. hasPrefix()
hasPrefix()
문자열이 특정 문자로 시작하면 true를 반환하는 메서드가 있습니다. 첫 단어만 허용됩니다.
print(string.hasPrefix("서근"))
//true
3. uppercased()
uppercased()
메서드를 호출하여 문자열을 대문자로 바꿀 수 있습니다.
let string = "Hello, my name is Seogun"
print(string.uppercased())
//HELLO, MY NAME IS SEOGUN
4. sorted()
sorted()
메서드를 호출하여 문자열의 텍스트를 배열로 정렬하도록 할 수도 있습니다.
let students: Set = ["다", "라", "사", "가", "나", "마", "바"]
let sortedStudents = students.sorted()
print(sortedStudents)
//["가", "나", "다", "라", "마", "바", "사"]
5. contains()
contains()
메서드를 호출하여 요소가 시퀀스에서 발견 된 경우 true
, 그렇지 않으면 false
를 출력하게 할 수 있습니다.
let cast = ["서근", "포뇨", "하울", "소피아"]
print(cast.contains("서근"))
// Prints "true"
print(cast.contains("소스케"))
// Prints "false"
6. isEmpty
Array
, Set
, String
등 기타 컬렉션 유형
이 비어 있는지 확인하려면 다음과 같은 코드를 작성할 수 있습니다.
var toys = ""
if toys.count == 0 {
print("아무것도 들어있지 않습니다.")
}
하지만, isEmpty
를 사용하면 읽기가 더 명확하고 실행이 더 빨라집니다.
var toys = ""
if toys.isEmpty {
print("아무것도 들어있지 않습니다.")
}
//아무것도 들어있지 않습니다.
다시 한번 말하지만 isEmpty
는 Array
, Set
, String
등 기타 컬렉션 유형
에서 모두 사용 가능합니다.
Stirng
에는 더 많은 프로퍼티와 메서드가 있습니다. Xcode에서 다양한 옵션들을 확인해보는 것이 좋습니다.
Stirng은 왜 Struct 인가요?
다른 많은 언어에서 문자열은 구조체가 아닙니다. 문자의 시퀀스 일 뿐이죠.
Swift는 다른 접근 방식을 취합니다. 문자열은 구조체이며 실제로 그 기능이 많이 있습니다.
거의 모든 Swift의 핵심 유형은 strings
, integers
, arrays
, dictionaries
, 심지어 Booleans
을 포함하여 모두 구조체로 구현됩니다. 구조체는 Swift에서 간단하고 빠르며 효율적입니다. 즉, 필요한 만큼 만들고 제거할 수 있습니다.
그러나 문자열은 약간 복잡할 수 도 있습니다.
예를 들어 영어 알파벳과 같은 것은 26 개의 소문자와 26 개의 대문자를 사용하지만, Swift는 한국어, 일본어, 히브리어, 아랍어, 키릴 자모, 타밀어 등 다른 스크립트도 처리할 수 있어야 합니다. 심지어 50,000 개 이상의 한자가 있죠!
제일 복잡한 부분은 이모지를 다루는 방법입니다. 왜냐하면 피부톤과 성별에는 셀 수 없이 많은 변화가 있기 때문입니다.
각각의 이모지를 고유한 "문자"로 저장하는 대신, 이것들은 여러 개의 특별한 문자로 분해됩니다.
예를 들어,
"왼쪽 여자는 밝은 피부톤이고 오른쪽 여자는 중간 어두운 피부톤인 두 여자가 손을 잡고 있다"
라는 이모지는 실제로 다음과 같이 저장합니다.
- Woman
- Light skin tone
- Joined to
- Shaking hands
- Joined to
- Woman
- Medium-dark skin tone
그래서, 실제로 한 개의 이모지를 저장하기 위해 서는 일곱 개의 "문자"를 사용합니다. 엄청 복잡하죠..?
결과적으로, Swift는 문자열을 처리하는 모든 기능을 문자열 자체에 캡슐화
합니다. 아래와 같이 말이죠.
print(string.count)
print(string.hasPrefix("Hello"))
print(string.uppercased())
print(string.sorted())
이모지를 잘못 셀 염려 없이 카운트 속성 등의 기능을 사용할 수 있다는 뜻입니다.
이모티콘으로 문자열을 정렬하고 난 후, 이모티콘 내의 개별 문자가 분리되면 많은 문제가 발생합니다.
다행스럽게도 Swift의 문자열은 우리를 위해이 모든 작업을 처리하도록 설계되었으며 여기저기서 몇 가지 에러를 유발하지만 전반적인 이점은 엄청납니다 :)
예시
let username = "twostraws"
username.uppercased() == "TWOSTRAWS"
var mac = "iMac"
mac.hasPrefix("i")
//true
var str = ""
for i in 1...5 {
str += "\(i)"
}
print(str.count)
//5
import Swift
let hello: String = "Hello"
let Seogun: String = "Seogun"
var greeting: String = hello + " " + Seogun + "☺️"
print(greeting) // Hello Seogun☺️
greeting = hello
greeting += " "
greeting += Seogun
greeting += "☺️"
print(greeting) // Hello Seogun☺️
/*===연산자를 통한 문자열 비교===*/
var isSameString: Bool = false
isSameString = hello == "Hello"
print(isSameString) //true
isSameString = Seogun == "seogun"
print(isSameString) // false
/*===메서드를 통한 접두어, 접미어 확인===*/
// 접두어 hasPrefix
var hasPrefix: Bool = false
hasPrefix = hello.hasPrefix("He")
print(hasPrefix) //true
hasPrefix = hello.hasPrefix("he")
print(hasPrefix) // false
hasPrefix = Seogun.hasPrefix("Seo")
print(hasPrefix) // true
hasPrefix = Seogun.hasPrefix("SEO")
print(hasPrefix) // false
// 접미어 hasSuffix
var hasSuffix: Bool = false
hasSuffix = hello.hasSuffix("He")
print(hasSuffix) // false
hasSuffix = hello.hasSuffix("llo")
print(hasSuffix) // true
hasSuffix = Seogun.hasSuffix("gun")
print(hasSuffix) // true
hasSuffix = greeting.hasSuffix("Seogun")
print(hasSuffix) // false
hasSuffix = greeting.hasSuffix("Seogun☺️")
print(hasSuffix) // ture
/*===메서드를 통한 대소문자 변환===*/
var convertedString: String = ""
convertedString = hello.uppercased()
print(convertedString) //HELLO
convertedString = hello.lowercased()
print(convertedString) // hello
convertedString = greeting.uppercased()
print(convertedString) // HELLO SEOGUN☺️
convertedString = Seogun.lowercased()
print(convertedString) // seogun
/*===프로퍼티를 통한 빈 문자열 확인===*/
var isEmptyString: Bool = false
isEmptyString = hello.isEmpty
print(isEmptyString) // false
greeting = ""
isEmptyString = greeting.isEmpty
print(isEmptyString) // true
/*===프로퍼티를 이용해 문자열 길이 확인===*/
print(greeting.count) // 0
greeting = "안녕하세요. 서근개발노트 입니다."
print("greeting의 문자 개수는 \(greeting.count)개 입니다.")
// greeting의 문자 개수는 18개 입니다.
print(Seogun.count) // 6
/*===여러 줄의 문자열을 사용하려면 """ 사용===*/
greeting = """
안녕하세요. 서근입니다.
저는 서근개발노트라는 블로그를 운영중입니다.
앞으로 잘 부탁드리겠습니다.
"""
print(greeting)
String의 프로퍼티 및 메서드 TEST: 문제를 풀려면 이곳을 클릭해주세요.
읽어주셔서 감사합니다🤟
'SWIFT > Grammar' 카테고리의 다른 글
swift : 기초문법 [ 프로퍼티 #1-1 지연 저장 프로퍼티(Lazy)] (0) | 2021.03.01 |
---|---|
Swift : 기초문법 [Array의 프로퍼티 및 메서드] (3) | 2021.02.28 |
Swift : 기초문법 [구조체 - Struct] (0) | 2021.02.26 |
Swift : 기초문법 [#4 후행 클로저에 매개변수 사용 ] (0) | 2021.02.25 |
Swift : 기초문법 [#3 후행 클로저 - Closure syntax] (0) | 2021.02.24 |