Analyser NSURL propriété de requête
J'ai une URL du type myApp://action/1?parameter=2&secondparameter=3
Avec la propriété de requête-je obtenir partie suivante de mon URL
parameter=2&secondparameter=3
Est-il un moyen facile de mettre cela dans une NSDictionary
ou un Array
?
Thx a lot
Vous devez vous connecter pour publier un commentaire.
Quelque chose comme ça:
Note : Ceci est un exemple de code. Tous les cas d'erreur ne sont pas gérés.
[params setObject:[elts lastObject] forKey:[elts firstObject]];
son plus sûrVous pouvez utiliser
queryItems
dansURLComponents
.Swift
Alternativement, vous pouvez ajouter une extension sur l'URL pour rendre les choses plus facile.
Vous pouvez ensuite accéder au paramètre par son nom.
http://example.com/abc#abc?param1=value1¶m2=param2
queryItems sera nulJ'ai eu raison d'écrire quelques extensions de ce comportement qui pourrait venir dans maniable. D'abord l'en-tête:
Ces méthodes étendre NSString, NSURL, et NSDictionary, pour vous permettre de convertir vers et à partir de composants de requête, chaînes du dictionnaire et des objets contenant les résultats.
Maintenant connexes .m code:
Essayer ça ;)!
Tous les posts précédents ne pas faire de l'encodage de l'url correctement. Je vous suggère les méthodes suivantes:
if(!query||[query length] == 0)
est redondante. Vous pouvez vérifierif([query length] == 0)
comme dans le cas quequery == nil
, il sera de retour la valeur de0
si vous essayez d'appeler à la longueur sur elle.NSUTF8StringEncoding
danssplitQuery
à l'appui de tous les jeux de caractères 🙂 Aussi,[string stringByAddingPercentEncodingWithAllowedCharacters:NSCharacterSet.URLQueryAllowedCharacterSet]
est une nouvelle méthode de codage pourconcatenateQuery
.Ici est l'extension rapide:
Selon le déjà très propre réponse de Onato j'ai écrit une extension pour NSURL rapide où vous pouvez obtenir une requête de paramètre comme ceci:
par exemple, l'URL contient la paire param=some_value
L'extension se présente comme:
Pour ceux qui utilisent Boulons de Cadre vous pouvez utiliser:
N'oubliez pas d'importer:
Si vous avez Facebook SDK dans votre projet, vous avez également Boulons. Facebook est à l'aide de ce cadre comme une dépendance.
BFURL(url: url)?.inputQueryParameters?["myKey"] as? String
La meilleure façon de traiter avec des Url est maintenant
NSURLComponents
. En particulier, laqueryItems
propriété qui retourne unNSArray
de params.Si vous voulez les params dans un
NSDictionary
, voici une méthode:Mise en garde: l'Url peut avoir répété params, mais le dictionnaire ne contient que la dernière valeur de dupliquées param. Si cela n'est pas souhaitable, d'utiliser le
queryItems
tableau directement.Swift 2.1
Oneliner:
Utilisé comme une extension sur NSURL:
Exemple:
Veuillez noter que si vous utilisez OS X 10.10 ou iOS 8 (ou version ultérieure), il est probablement préférable d'utiliser
NSURLComponents
et laqueryItems
de la propriété et de créer le dictionnaire de laNSURLQueryItems
directement.Voici un
NSURLComponents
en fonctionNSURL
solution d'extension:Une note de bas de page à la NSURL extension, c'est qu'il est en fait possible de Swift pour donner la propriété du même nom que la chaîne existante de la propriété—
query
. Je ne savais pas jusqu'à ce que j'ai essayé, mais le polymorphisme de Swift vous permet de ne diffèrent que sur le type de retour. Donc, si l'étendue NSURL propriété estpublic var query: [String:String]
il fonctionne. Je n'avais pas l'utiliser dans l'exemple que je trouve ça un peu fou, mais il fonctionne ...J'ai publié une classe simple de faire le travail en vertu de MIT:
https://github.com/anegmawad/URLQueryToCocoa
Avec elle, vous pouvez avoir des tableaux et des objets dans la requête, qui sont collectées et collées ensemble
Par Exemple
deviendra:
Vous pouvez y penser comme à une URL de requête homologue de
NSJSONSerializer
.Il semble que vous l'utilisez pour traiter les données entrantes à partir d'une autre application iOS. Si oui, c'est ce que j'utilise pour le même but.
Appel Initial (par exemple, dans une application externe):
Méthode pour extraire une chaîne de Requête de données de NSURL et enregistrer en tant que NSDictionary:
Utilisation:
Cette classe est une solution sympa pour analyser les url.
.h fichier
.m fichier
Hendrik a écrit un bel exemple de l'extension de cette question, mais j'ai dû ré-écrire pour ne pas utiliser objective-c de la bibliothèque de méthodes. À l'aide de
NSArray
dans swift n'est pas la bonne approche.C'est le résultat, tous les rapide et un peu plus en sécurité. L'exemple d'utilisation sera de moins en moins de lignes de code avec Swift 1.2.
Utilisation:
Ou, plus détaillée de l'utilisation:
essayez ceci:
Plus robuste solution si vous êtes en utilisant une URL pour transmettre des données à partir de l'application web sur le téléphone et que vous voulez passer des tableaux, des nombres, des chaînes, ...
JSON encoder votre objet en PHP
Et JSON décoder le résultat dans iOS