에서 Objective-C
코드에서 문자열을 확인 할 NSString
수 있습니다 :
NSString *string = @"hello Swift";
NSRange textRange =[string rangeOfString:@"Swift"];
if(textRange.location != NSNotFound)
{
NSLog(@"exists");
}
그러나 Swift에서 어떻게해야합니까?
답변
Swift로 정확히 같은 호출을 할 수 있습니다 :
스위프트 4 & 스위프트 5
Swift 4에서 String은 Character
값 의 모음 이므로 Swift 2 및 3에서는 이와 같지 않으므로 이보다 간결한 코드 1을 사용할 수 있습니다 .
let string = "hello Swift"
if string.contains("Swift") {
print("exists")
}
스위프트 3.0+
var string = "hello Swift"
if string.range(of:"Swift") != nil {
print("exists")
}
// alternative: not case sensitive
if string.lowercased().range(of:"swift") != nil {
print("exists")
}
이전 스위프트
var string = "hello Swift"
if string.rangeOfString("Swift") != nil{
println("exists")
}
// alternative: not case sensitive
if string.lowercaseString.rangeOfString("swift") != nil {
println("exists")
}
저를 포함한 일부 사람들이 전화로 이상한 문제를 겪었으므로 이것이 유용한 해결책이되기를 바랍니다 containsString()
. 1
추신. 잊지 마세요import Foundation
각주
- Strings에서 수집 함수를 사용 하면 예를 들어 이모티콘이나 악센트 문자와 같은 다른 grapheme 클러스터를 다룰 때 예기치 않은 결과를 줄 수있는 몇 가지 경우 가 있음을 기억하십시오 .
답변
확장 방법
스위프트 4
extension String {
func contains(find: String) -> Bool{
return self.range(of: find) != nil
}
func containsIgnoringCase(find: String) -> Bool{
return self.range(of: find, options: .caseInsensitive) != nil
}
}
var value = "Hello world"
print(value.contains("Hello")) // true
print(value.contains("bo")) // false
print(value.containsIgnoringCase(find: "hello")) // true
print(value.containsIgnoringCase(find: "Hello")) // true
print(value.containsIgnoringCase(find: "bo")) // false
일반적으로 Swift 4 에는 방법 이 포함되어 있지만 iOS 8.0 이상에서 사용할 수 있습니다.
스위프트 3.1
당신은 확장 쓸 수 있습니다 contains:
및 containsIgnoringCase
위해를String
extension String {
func contains(_ find: String) -> Bool{
return self.range(of: find) != nil
}
func containsIgnoringCase(_ find: String) -> Bool{
return self.range(of: find, options: .caseInsensitive) != nil
}
}
이전 스위프트 버전
extension String {
func contains(find: String) -> Bool{
return self.rangeOfString(find) != nil
}
func containsIgnoringCase(find: String) -> Bool{
return self.rangeOfString(find, options: NSStringCompareOptions.CaseInsensitiveSearch) != nil
}
}
예:
var value = "Hello world"
print(value.contains("Hello")) // true
print(value.contains("bo")) // false
print(value.containsIgnoringCase("hello")) // true
print(value.containsIgnoringCase("Hello")) // true
print(value.containsIgnoringCase("bo")) // false
답변
문서에서 containsString()
문자열 을 호출 하면 작동하는 것 같습니다 .
Swift의 String 유형은 Foundation의 NSString 클래스와 완벽하게 연결됩니다. Cocoa 또는 Cocoa Touch에서 Foundation 프레임 워크를 사용하는 경우이 장에서 설명하는 String 기능 외에도 전체 NSString API를 사용하여 생성 한 모든 String 값을 호출 할 수 있습니다. NSString 인스턴스가 필요한 API와 함께 String 값을 사용할 수도 있습니다.
그러나 그런 식으로 작동하지 않는 것 같습니다.
을 사용하려고 someString.containsString(anotherString)
하면 컴파일 시간 오류가 발생합니다.'String' does not contain a member named 'containsString'
.
따라서 몇 가지 옵션이 있습니다. 그중 하나는 명시 적으로 다른 두 가지 String
를 사용하여 Objective-C에 명시 적으로 브리지 하는 것입니다.bridgeToObjectiveC()
NSString
String
로를NSString
브리징을 통해 다음을 얻을 수 있습니다.
var string = "hello Swift"
if string.bridgeToObjectiveC().containsString("Swift") {
println("YES")
}
문자열을 명시 적으로 입력 NSString
하면 다음을 얻을 수 있습니다.
var string: NSString = "hello Swift"
if string.containsString("Swift") {
println("YES")
}
기존이있는 경우 String
NSString (string :)을 사용하여 NSString을 초기화 할 수 있습니다.
var string = "hello Swift"
if NSString(string: string).containsString("Swift") {
println("YES")
}
그리고 마지막으로 기존 String
에 다음 NSString
과 같이 캐스팅 할 수 있습니다
var string = "hello Swift"
if (string as NSString).containsString("Swift") {
println("YES")
}
답변
다른 것. 대소 문자 및 분음 부호 옵션을 지원합니다.
스위프트 3.0
struct MyString {
static func contains(_ text: String, substring: String,
ignoreCase: Bool = true,
ignoreDiacritic: Bool = true) -> Bool {
var options = NSString.CompareOptions()
if ignoreCase { _ = options.insert(NSString.CompareOptions.caseInsensitive) }
if ignoreDiacritic { _ = options.insert(NSString.CompareOptions.diacriticInsensitive) }
return text.range(of: substring, options: options) != nil
}
}
용법
MyString.contains("Niels Bohr", substring: "Bohr") // true
iOS 9 이상
iOS 9부터 사용 가능한 대소 문자 및 분음 부호 구분 기능
if #available(iOS 9.0, *) {
"Für Elise".localizedStandardContains("fur") // true
}
답변
Xcode 7.1과 Swift 2.1 containsString()
은 나에게 잘 작동합니다.
let string = "hello swift"
if string.containsString("swift") {
print("found swift")
}
스위프트 4 :
let string = "hello swift"
if string.contains("swift") {
print("found swift")
}
대소 문자를 구분하지 않는 Swift 4 예제 :
let string = "Hello Swift"
if string.lowercased().contains("swift") {
print("found swift")
}
또는 대소 문자를 구분하지 않는 String
확장명을 사용하십시오.
extension String {
func containsIgnoreCase(_ string: String) -> Bool {
return self.lowercased().contains(string.lowercased())
}
}
let string = "Hello Swift"
let stringToFind = "SWIFT"
if string.containsIgnoreCase(stringToFind) {
print("found: \(stringToFind)") // found: SWIFT
}
print("string: \(string)")
print("stringToFind: \(stringToFind)")
// console output:
found: SWIFT
string: Hello Swift
stringToFind: SWIFT
답변
스위프트 4.2
사용하다
func contains(_ str: String) -> Bool
예
let string = "hello Swift"
let containsSwift = string.contains("Swift")
print(containsSwift) // prints true
답변
> 스위프트 3.0
let str = "Hello Swift"
if str.lowercased().contains("Swift".lowercased()) {
print("String Contains Another String")
} else {
print("Not Exists")
}
산출
String Contains Another String