J'essaie de convertir une String
en NSURL
et mon code est le suivant:
var url = "https://maps.googleapis.com/maps/api/distancematrix/json?origins=\(self.latitude),\(self.longitude)&destinations=\(self.stringForDistance)&language=en-US"
println("This is String: \(url)")
var remoteUrl : NSURL? = NSURL(string: url)
println("This is URL: \(remoteUrl)")
Et la console affiche quelque chose comme ça:
This is String: https://maps.googleapis.com/maps/api/distancematrix/json?origins=-34.4232722,150.8865837&destinations=-34.4250728,150.89314939999997|-34.4356434,150.8858692|-34.4250728,150.89314939999997|-34.4356434,150.8858692|-34.4250728,150.89314939999997|-34.4356434,150.8858692|-34.423234,150.88658899999996|-34.423234,150.88658899999996|-34.428251,150.899673|-34.4257439,150.89870229999997|-34.423234,150.88658899999996|-34.4257439,150.89870229999997|-34.425376,150.89388299999996&language=en-US
This is URL: nil
La remoteUrl
est nil
et je ne sais pas quel est le problème ici.
Après cela, j'essaie de trier String
comme ceci:
var url : String = "https://maps.googleapis.com/maps/api/distancematrix/json?origins=-34.4232722,150.8865837&destinations=-34.4250728,150.89314939999997&language=en-US"
println("This is String: \(url)")
var remoteUrl : NSURL? = NSURL(string: url)
println("This is URL: \(remoteUrl)")
Et la console imprime:
This is String: https://maps.googleapis.com/maps/api/distancematrix/json?origins=-34.4232722,150.8865837&destinations=-34.4250728,150.89314939999997&language=en-US
This is URL: Optional(https://maps.googleapis.com/maps/api/distancematrix/json?origins=-34.4232722,150.8865837&destinations=-34.4250728,150.89314939999997&language=en-US)
Cela fonctionne bien.
Alors, quelqu'un peut-il me dire ce qui ne va pas avec mon premier cas?
Comme suggéré par le Martin R, je vois THIS post et j'ai converti ce code objective-c en Swift et j'ai obtenu ce code:
var url : NSString = "https://maps.googleapis.com/maps/api/distancematrix/json?origins=\(self.latitude),\(self.longitude)&destinations=\(self.stringForDistance)&language=en-US"
var urlStr : NSString = url.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)!
var searchURL : NSURL = NSURL(string: urlStr)!
println(searchURL)
et cela fonctionne correctement.
Pour Swift 3.0:
let url : NSString = "https://maps.googleapis.com/maps/api/distancematrix/json?origins=\(self.latitude),\(self.longitude)&destinations=\(self.stringForDistance)&language=en-US"
let urlStr : NSString = url.addingPercentEscapes(using: String.Encoding.utf8.rawValue)! as NSString
let searchURL : NSURL = NSURL(string: urlStr as String)!
print(searchURL)
comme dit blwinters, dans Swift 3.0 use
URL(string: urlPath.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!)
Je pense que ça fonctionne parfaitement pour moi
var url : String = "https://maps.googleapis.com/maps/api/distancematrix/json?origins=-34.4232722,150.8865837&destinations=-34.4250728,150.89314939999997&language=en-US"
println("This is String: \(url)")
var urlStr : NSString = url.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)!
var remoteUrl : NSURL? = NSURL(string: url)
println("This is URL: \(remoteUrl!)")
Vous pouvez obtenir l'erreur suivante si NSURL est null et que vous essayez de charger l'URL http sur l'affichage Web:
fatal error: unexpectedly found nil while unwrapping an Optional value
Pour être en sécurité, nous devrions utiliser:
var urlStr = strLink!.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)
if var url = NSURL(string: urlStr!){
println(self.strLink!)
self.webView!.loadRequest(NSURLRequest(URL: url))
}
Swift 3.0
Un moyen sûr de réparer une chaîne incorrecte en cours de conversion en NSURL consiste à décompresser la variable de chaîne urlPath à l'aide de "guard let"
guard let url = NSURL(string: urlPath.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!)
else
{
print("Couldn't parse myURL = \(urlPath)")
return
}
La variable appelée "urlPath" dans mon exemple ci-dessus serait la chaîne d'URL que vous avez déjà déclarée ailleurs dans votre code.
Je suis tombé sur cette réponse parce que, de manière aléatoire, j'avais l'erreur nulle avec XCode qui se cassait au moment où ma chaîne avait été transformée en NSURL. Aucune logique quant à la raison pour laquelle il était aléatoire même lorsque j'ai imprimé l'URL, ils auraient l'air bien. Dès que j'ai ajouté le .addingPercentEncoding, il était de nouveau opérationnel sans aucun problème.
tl; dr Pour tous ceux qui lisent ceci, essayez le code ci-dessus et remplacez "urlPath" par votre propre URL de chaîne locale.
ce travail pour moi
let url : NSString = MyUrls.baseUrl + self.url_file_open as NSString
let urlStr : NSString = url.addingPercentEscapes(using: String.Encoding.utf8.rawValue)! as NSString
if let url = URL(string: urlStr as String) {
let request = URLRequest(url: url)
self.businessPlanView.loadRequest(request)
}