비교 연산자를 사용하여 문자열을 간단하게 비교를 할 수 있습니다.
비교 연산자를 사용할 때는 각 문자열의 첫 번째 문자의 유니코드 값을 비교하여 논리값을 반환합니다.
var x = "hello"
var y = "Hello"
x == y // false
x < y // false
x > y // true
문자열을 간단하게 비교하여 논리값을 반환 받고 싶을 때는 비교연산자를 사용합니다.
하지만 문자열의 대소문자 등을 생각해야 하는 경우 또는 구체적인 결괏값을 반환받고 싶을 때는 문자열 메서드를 사용한 방법이 좋습니다.
✅ 대/소문자를 무시하고 비교하는 메서드 caseInsensitiveCompare()
문자열.caseInsensitiveCompare(비교할 문자열)
caseInsensitiveCompare() 메서드의 반환 타입은 부울(Bool) 타입이 아닌 "ComparisonResult" 타입입니다. (ComparisonResult은 열거형 타입입니다.)
- 대/소문자를 무시한 상태에서 문자열이 같으면 orderedSame
- 대/소문자를 무시한 상태에서 비교 대상의 유니코드값이 크면 orderedAscending
- 대/소문자를 무시한 상태에서 비교 대상의 유니코드값이 작으면 orderedDescending
var x = "A" var y = "a" x.caseInsensitiveCompare(y) // NSComparisonResult x.caseInsensitiveCompare(y).rawValue // 0 var x2 = "A" var y2 = "B" x2.caseInsensitiveCompare(y2) // NSComparisonResult x2.caseInsensitiveCompare(y2).rawValue // -1 var x3 = "AB" var y3 = "A" x3.caseInsensitiveCompare(y3) // NSComparisonResult x3.caseInsensitiveCompare(y3).rawValue // 1
✅ 문자열의 일치 여부를 비교/확인하는 메서드 compare()
문자열.compare(비교하려는 문자열)
문자열.compare(비교하려는 문자열, option: 원하는 옵션(생략 가능))
compare() 메서드 또한 부울(Bool) 타입이 아닌 "ComparisonResult" 타입입니다. (ComparisonResult은 열거형 타입입니다.)
위에서 설명한
caseInsensitiveCompare()
메서드는 기본적으로 대/소문자를 무시하는 기능을 가지고 있지만,compare()
메서드는 아무런 기능 없이 단순 문자열만 비교하는 메서드 입니다. (옵션을 추가하면 다양한 방식의 문자열 비교가 가능합니다.)
- 대/소문자를 무시한 상태에서 문자열이 같으면 orderedSame
- 대/소문자를 무시한 상태에서 비교 대상의 유니코드값이 크면 orderedAscending
- 대/소문자를 무시한 상태에서 비교 대상의 유니코드값이 작으면 orderedDescending
var x1 = "hello" var y1 = "hello" x1.compare(y1).rawValue // 0 h = h var x2 = "zello" var y2 = "hello" x2.compare(y2).rawValue // 1 z > h var x3 = "aello" var y3 = "hello" x3.compare(y3).rawValue // -1 a < h
compare()
메서드에 옵션 파라미터를 추가하면 다양한 방식의 문자열 비교가 가능합니다.var x = "hello" var y = "Hello" x.compare(y, options: .caseInsensitive).rawValue // 0
옵션의 종류는 아래와 같습니다.
옵션 기능 .caseInsensitive 대소문자 무시 .regularExpression 정규식 검증 .numeric 숫자 전체를 인식 .diacriticInsensitive 숫자 전체를 인식 .numeric 발음기호 무시 이 외에도 다양한 옵션이 존재합니다.
🤔 문자열 메서드의 반환 값이 참(Ture)/거짓(False)이 아닌 복잡한 열겨형 타입일까??
caseInsensitiveCompare() 메서드와 compare() 메서드를 사용하여 반환받은 값은 열거형 타입이기 때문에 사용하기도 복잡하고 어렵다는 단점을 가지고 있습니다.
하지만 반환받은 열거형의 원시값(Raw Value)을 사용하면 참(Ture)/거짓(False)뿐만 아닌 문자열의 유니코드값까지 고려할 수 있으므로 다양하고 구체적인 형태의 코드를 작성할 수 있다는 장점을 가지고 있습니다.
- 문자열을 간단하게 비교할 때는 비교 연산자를 사용
var x = "hello" var y = "Hello" x == y // false x > y // true x < y // false
- 문자열을 구체적으로 비교하고 싶을 때는 문자열 비교 메서드를 사용(반환 타입은 열거형)
var x = "hello" var y = "Hello" x.caseInsensitiveCompare(y).rawValue // 기본적으로 대/소문자를 무시하면서 비교 x.compare(y).rawValue // 문자열 비교 x.compare(y, options: .caseInsensitive).rawValue // 대/소문자를 무시하는 옵션을 추가