In Objective-C
dem Code, der nach einem Teilstring in einem sucht, NSString
ist:
NSString *string = @"hello Swift";
NSRange textRange =[string rangeOfString:@"Swift"];
if(textRange.location != NSNotFound)
{
NSLog(@"exists");
}
Aber wie mache ich das in Swift?
Antworten:
Mit Swift können Sie genau den gleichen Anruf tätigen:
Swift 4 & Swift 5
In Swift 4 ist String eine Sammlung von
Character
Werten. In Swift 2 und 3 war dies nicht der Fall. Sie können also diesen prägnanteren Code 1 verwenden :Swift 3.0+
Älterer Swift
Ich hoffe, dies ist eine hilfreiche Lösung, da einige Leute, einschließlich mir, durch einen Anruf auf seltsame Probleme gestoßen sind
containsString()
. 1PS. Vergiss es nicht
import Foundation
Fußnoten
quelle
An NSRange structure giving the location and length in the receiver of the first occurrence of aString. Returns {NSNotFound, 0} if aString is not found or is empty (@"").
Vielleichtnil
funktioniert es nicht richtig, nur nach zu suchen.{NSNotFound, 0}
er für Sie als Null dargestellt wird. Wenn es sich um einen tatsächlichen Bereich handelt, wird er für Sie als schneller Bereich dargestellt (optional). Cool.NSString
ist.rangeOfString()
. Dies ruftString
's.rangeOfString()
, was alsfunc rangeOfString(aString: String, options mask: NSStringCompareOptions = default, range searchRange: Range<Index>? = default, locale: NSLocale? = default) -> Range<Index>?
Verlängerungsweg
Swift 4
Im Allgemeinen enthält Swift 4 eine Methode, die jedoch ab iOS 8.0+ verfügbar ist
Swift 3.1
Sie können Erweiterung
contains:
undcontainsIgnoringCase
für schreibenString
Ältere Swift-Version
Beispiel:
quelle
Foundation
Nähe ...containsString
funktioniert gut.Aus den Dokumenten geht hervor, dass das Aufrufen
containsString()
eines Strings funktionieren sollte:Es scheint jedoch nicht so zu funktionieren.
Wenn Sie versuchen, zu verwenden
someString.containsString(anotherString)
, wird ein Fehler bei der Kompilierung angezeigt, der besagt'String' does not contain a member named 'containsString'
.Sie haben also nur noch einige Optionen, von denen eine darin besteht, Ihre Verbindung
String
zu Objective-C explizit zu überbrücken , indem SiebridgeToObjectiveC()
zwei andere verwenden. Dabei wird explizit eine verwendet,NSString
und bei der letzten Option wird die OptionString
in eine umgewandeltNSString
Durch Überbrücken erhalten Sie:
Wenn Sie die Zeichenfolge explizit als eingeben
NSString
, erhalten Sie:Wenn Sie einen vorhandenen haben
String
, können Sie einen NSString mit NSString (Zeichenfolge :) daraus initialisieren:Und schließlich können Sie eine vorhandene
String
in eineNSString
wie unten umwandelnquelle
[__NSCFString containsString:]: unrecognized selector sent to instance
. Außerdem kann ich die MethodecontainsString
in den Entwicklungsdokumenten nicht finden , um zu bestätigen, ob sie für iOS 8 neu ist.Noch einer. Unterstützt Fall- und diakritische Optionen.
Swift 3.0
Verwendungszweck
iOS 9+
Groß- und Kleinschreibung und diakritisch unempfindliche Funktion seit iOS 9 verfügbar.
quelle
Ab Xcode 7.1 und Swift 2.1
containsString()
funktioniert das für mich einwandfrei.Swift 4:
Und ein Swift 4-Beispiel ohne Berücksichtigung der Groß- und Kleinschreibung:
Oder verwenden Sie eine
String
Erweiterung ohne Berücksichtigung der Groß- und Kleinschreibung :quelle
import Foundation
, sonst wird dies nicht funktionieren.import UIKit
dieimport Foundation
erforderlich ist , zumindest mit iOS 11 und Swift 4.In Swift 4.2
Verwenden
Beispiel
quelle
> IN SWIFT 3.0
Ausgabe
quelle
Sie können dies in Swift sehr einfach mit dem folgenden Code tun:
quelle
Nur ein Nachtrag zu den Antworten hier.
Sie können auch einen lokalen Test ohne Berücksichtigung der Groß- und Kleinschreibung durchführen, indem Sie Folgendes verwenden:
Beispiel:
AKTUALISIEREN
Dies ist Teil des Foundation Frameworks für iOS und Mac OS X 10.10.x und war zum Zeitpunkt meiner ursprünglichen Veröffentlichung Teil von 10.10.
quelle
Hier ist mein erster Versuch auf dem schnellen Spielplatz. Ich erweitere String durch die Bereitstellung von zwei neuen Funktionen (enthält und enthältIgnoreCase)
Verwenden Sie es so
Ich würde mich über Feedback freuen :)
quelle
Von allen Antworten hier denke ich, dass sie entweder nicht funktionieren oder ein bisschen hacken (zurück zu NSString). Es ist sehr wahrscheinlich, dass sich die richtige Antwort darauf mit den verschiedenen Beta-Versionen geändert hat.
Folgendes benutze ich:
Das "! = Null" wurde mit Beta 5 benötigt.
quelle
Hier sind Sie ja:
quelle
Sie müssen hierfür keinen benutzerdefinierten Code schreiben. Ab der Version 1.2 verfügt Swift bereits über alle Methoden, die Sie benötigen:
count(string)
;contains(string, substring)
;startsWith(string, substring)
quelle
In Swift 3
quelle
Bitte schön! Bereit für Xcode 8 und Swift 3.
quelle
string.containsString ist nur in 10.10 Yosemite (und wahrscheinlich iOS8) verfügbar. Auch die Überbrückung mit ObjectiveC stürzt in 10.9 ab. Sie versuchen, einen NSString an NSCFString zu übergeben. Ich kenne den Unterschied nicht, aber ich kann 10.9 barfs sagen, wenn dieser Code in einer OS X 10.9-App ausgeführt wird.
Hier sind die Unterschiede in Swift mit 10.9 und 10.10: https://developer.apple.com/library/prerelease/mac/documentation/General/Reference/APIDiffsMacOSX10_10SeedDiff/index.html enthältString ist nur in 10.10 verfügbar
Der obige String-Bereich funktioniert unter 10.9 hervorragend. Ich finde, dass die Entwicklung auf 10.9 mit Xcode Beta2 super stabil ist. Ich benutze keine Spielplätze durch oder die Kommandozeilenversion von Spielplätzen. Ich finde, wenn die richtigen Frameworks importiert werden, ist die automatische Vervollständigung sehr hilfreich.
quelle
Mit und neuer Syntax in Swift 4 können Sie einfach
string.contains("Swift 4 is the best")
Zeichenfolge ist Ihre Zeichenfolgenvariable
quelle
Xcode 8 / Swift 3 Version:
Sie können auch verwenden
contains
:quelle
Überprüfen Sie, ob es "Hallo" enthält.
quelle
Schnelle 4- Wege-Suche nach Teilzeichenfolgen, einschließlich des erforderlichen
Foundation
(oderUIKit
) Framework-Imports:Wenn kein
Foundation
(oderUIKit
) Framework importiert wird,str.contains("Can")
wird ein Compilerfehler ausgegeben.Diese Antwort spuckt die Antwort von manojlds wieder aus , was völlig richtig ist. Ich habe keine Ahnung , warum so viele Antworten so viel Mühe neu durchlaufen
Foundation
‚s -String.contains(subString: String)
Methode.quelle
quelle
Swift 3: Hier sehen Sie meine intelligente Sucherweiterung für Zeichenfolgen, mit der Sie nach Zeichenfolgen suchen können, um festzustellen, ob sie enthalten sind, oder um eine Sammlung basierend auf einem Suchtext zu filtern.
https://github.com/magonicolas/Swift-Smart-String-Search
quelle
In iOS 8 und höher können Sie diese beiden
NSString
Methoden verwenden:quelle
Ich habe einige interessante Anwendungsfälle gefunden. Diese Varianten verwenden die rangeOfString-Methode, und ich füge das Gleichheitsbeispiel hinzu, um zu zeigen, wie die Such- und Vergleichsfunktionen von Strings in Swift 2.0 am besten verwendet werden können
quelle
Wenn Sie überprüfen möchten, ob ein String einen anderen Sub-String enthält oder nicht, können Sie dies auch so überprüfen:
Wenn Sie in dieser speziellen Zeichenfolge wissen möchten, ob sie den Fruchtnamen "Apfel" enthält oder nicht, können Sie Folgendes tun:
Hoffe das funktioniert bei dir.
quelle
Sie können einfach das tun, was Sie erwähnt haben:
Aus den Dokumenten:
Sie müssen
import Foundation
dieNSString
Methoden überbrücken und sie der String-Klasse von Swift zur Verfügung stellen.quelle
SWIFT 4 ist sehr einfach !!
quelle
$ swift Welcome to Apple Swift version 4.2 (swiftlang-1000.11.37.1 clang-1000.11.45.1). Type :help for assistance. 1> print ("Ping") Ping 2> Print ("Ping") error: repl.swift:2:1: error: use of unresolved identifier 'Print' Print ("Ping") ^~~~~
Durch die Bereitstellung einer nicht getesteten Antwort, die nicht funktioniert. Drucken! = Drucken.