태그 보관물: swift

swift

Swift에서 문자열에 다른 문자열이 포함되어 있는지 어떻게 확인합니까?

에서 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

각주

  1. 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()NSStringString 로를NSString

브리징을 통해 다음을 얻을 수 있습니다.

var string = "hello Swift"
if string.bridgeToObjectiveC().containsString("Swift") {
    println("YES")
}

문자열을 명시 적으로 입력 NSString하면 다음을 얻을 수 있습니다.

var string: NSString = "hello Swift"
if string.containsString("Swift") {
    println("YES")
}

기존이있는 경우 StringNSString (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