Ich habe eine URL wie myApp://action/1?parameter=2&secondparameter=3
Mit der Eigenschaftsabfrage erhalte ich folgenden Teil meiner URL
parameter=2&secondparameter=3
Gibt es eine Möglichkeit, dies einfach in ein NSDictionary
oder ein zu setzen Array
?
Vielen Dank
iphone
objective-c
nsurl
gabac
quelle
quelle
[params setObject:[elts lastObject] forKey:[elts firstObject]];
es ist sichererSie können
queryItems
in verwendenURLComponents
.Schnell
Alternativ können Sie der URL eine Erweiterung hinzufügen, um die Arbeit zu vereinfachen.
Sie können dann über den Namen auf den Parameter zugreifen.
quelle
http://example.com/abc#abc?param1=value1¶m2=param2
queryItems wird null seinIch hatte Grund, einige Erweiterungen für dieses Verhalten zu schreiben, die sich als nützlich erweisen könnten. Zuerst der Header:
Diese Methoden erweitern NSString, NSURL und NSDictionary, damit Sie Zeichenfolgen und Wörterbuchobjekte, die die Ergebnisse enthalten, in und aus Abfragekomponenten konvertieren können.
Nun der zugehörige .m-Code:
quelle
Versuche dies ;)!
quelle
Alle vorherigen Beiträge führen die URL-Codierung nicht ordnungsgemäß durch. Ich würde folgende Methoden vorschlagen:
quelle
if(!query||[query length] == 0)
ist redundant. Sie können sicher überprüfen, obif([query length] == 0)
für den Fall, dass derquery == nil
Wert zurückgegeben wird,0
wenn Sie versuchen, die Länge darauf aufzurufen.NSUTF8StringEncoding
insplitQuery
zu verwenden, um alle Zeichensätze zu unterstützen :) Auch[string stringByAddingPercentEncodingWithAllowedCharacters:NSCharacterSet.URLQueryAllowedCharacterSet]
ist eine neuere Art der Codierung fürconcatenateQuery
.Hier ist die Erweiterung in Kürze:
quelle
Nach der schon sehr sauberen Antwort von Onato ich in Swift eine Erweiterung für NSURL geschrieben, in der Sie einen Abfrageparameter wie diesen erhalten können:
Beispiel: Die URL enthält das Paar param = some_value
Die Erweiterung sieht aus wie:
quelle
Für diejenigen, die Bolts Framework verwenden , können Sie Folgendes verwenden:
Denken Sie daran zu importieren:
Wenn Sie zufällig ein Facebook SDK in Ihrem Projekt haben, haben Sie auch Bolts . Facebook nutzt dieses Framework als Abhängigkeit.
quelle
BFURL(url: url)?.inputQueryParameters?["myKey"] as? String
Der bevorzugte Weg, mit URLs umzugehen, ist jetzt
NSURLComponents
. Insbesondere diequeryItems
Eigenschaft, die einenNSArray
von params zurückgibt.Wenn Sie die Parameter in a
NSDictionary
haben möchten , finden Sie hier eine Methode:Vorsichtsmaßnahme: URLs können wiederholte Parameter haben, aber das Wörterbuch enthält nur den letzten Wert eines duplizierten Parameters. Wenn dies unerwünscht ist, verwenden Sie das
queryItems
Array direkt.quelle
Swift 2.1
Einzeiler:
Wird als Erweiterung für NSURL verwendet:
Beispiel:
Bitte beachten Sie, dass es bei Verwendung von OS X 10.10 oder iOS 8 (oder höher) wahrscheinlich besser ist,
NSURLComponents
diequeryItems
Eigenschaft zu verwenden und das WörterbuchNSURLQueryItems
direkt aus dem zu erstellen .Hier ist eine
NSURLComponents
basierteNSURL
Erweiterungslösung:Eine Fußnote zur NSURL-Erweiterung ist, dass es in Swift tatsächlich möglich ist, der Eigenschaft denselben Namen wie der vorhandenen Zeichenfolgeneigenschaft zu geben
query
. Ich wusste es nicht, bis ich es ausprobiert habe, aber der Polymorphismus in Swift lässt Sie nur beim Rückgabetyp unterscheiden. Wenn also die erweiterte NSURL-Eigenschaft vorhanden istpublic var query: [String:String]
, funktioniert sie. Ich habe dies im Beispiel nicht verwendet, da ich es ein bisschen verrückt finde, aber es funktioniert ...quelle
Ich habe eine einfache Klasse veröffentlicht, die den Job unter MIT erledigt:
https://github.com/anegmawad/URLQueryToCocoa
Damit können Sie Arrays und Objekte in der Abfrage haben, die gesammelt und zusammengeklebt werden
Beispielsweise
wird werden:
Sie können sich das als Gegenstück zu einer URL-Abfrage vorstellen
NSJSONSerializer
.quelle
Es sieht so aus, als würden Sie damit eingehende Daten von einer anderen iOS-Anwendung verarbeiten. Wenn ja, ist dies das, was ich für den gleichen Zweck benutze.
Erstanruf (zB in externer Anwendung):
Methode zum Extrahieren von QueryString-Daten aus NSURL und Speichern als NSDictionary:
Verwendung:
quelle
Diese Klasse ist eine gute Lösung für das Parsen von URLs.
.h Datei
.m Datei
quelle
Hendrik hat ein schönes Beispiel für die Erweiterung dieser Frage geschrieben, aber ich musste es neu schreiben, um keine objektiven c-Bibliotheksmethoden zu verwenden. Die
NSArray
schnelle Verwendung ist nicht der richtige Ansatz.Dies ist das Ergebnis, alles schnell und ein bisschen sicherer. Das Verwendungsbeispiel sind weniger Codezeilen mit Swift 1.2.
Verwendung:
Oder detailliertere Verwendung:
quelle
Versuche dies:
quelle
Ziemlich kompakter Ansatz:
quelle
Die robusteste Lösung, wenn Sie eine URL verwenden, um Daten von der Web-App an das Telefon zu übergeben, und Arrays, Zahlen, Zeichenfolgen, ...
JSON codiert Ihr Objekt in PHP
Und JSON dekodiert das Ergebnis in iOS
quelle