Ich versuche, eine String
in NSURL
umzuwandeln, und mein Code dafür lautet "Below":
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)")
Und die Konsole druckt so etwas:
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
Die remoteUrl
ist nil
und ich weiß nicht, was hier das Problem ist.
Danach versuche ich, String
so zu sortieren:
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)")
Und Konsolendrucke:
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)
Das funktioniert gut.
Kann mir jemand bitte sagen, was in meinem ersten Fall falsch ist?
Wie von der Martin R vorgeschlagen, sehe ich THIS post, und ich habe diesen Code für die Ziel-C in Swift konvertiert und diesen Code erhalten:
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)
und das funktioniert richtig.
Für 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)
wie blwinters sagte, in swift 3.0 use
URL(string: urlPath.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!)
Ich denke, versuchen Sie es, es ist perfekt für mich
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!)")
Sie erhalten die folgende Fehlermeldung, wenn NSURL den Wert null hat und versucht, die HTTP-URL über die Webansicht zu laden:
fatal error: unexpectedly found nil while unwrapping an Optional value
Um sicher zu gehen, sollten wir verwenden:
var urlStr = strLink!.stringByAddingPercentEscapesUsingEncoding(NSUTF8StringEncoding)
if var url = NSURL(string: urlStr!){
println(self.strLink!)
self.webView!.loadRequest(NSURLRequest(URL: url))
}
Swift 3.0
Eine sichere Methode zum Korrigieren einer fehlerhaften Zeichenfolge, die in NSURL konvertiert wird, besteht darin, die URL-Pfadvariable mit "guard let" zu entpacken.
guard let url = NSURL(string: urlPath.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!)
else
{
print("Couldn't parse myURL = \(urlPath)")
return
}
Die Variable mit dem Namen "urlPath" in meinem obigen Beispiel wäre die URL-Zeichenfolge, die Sie bereits an anderer Stelle in Ihrem Code angegeben haben.
Ich bin auf diese Antwort gestoßen, weil zufällig der Null-Fehler mit XCode an dem Punkt kam, an dem meine Zeichenfolge in eine NSURL umgewandelt wurde. Keine Logik, warum es zufällig war, auch wenn ich die URL druckte, würden sie gut aussehen. Sobald ich .addingPercentEncoding hinzugefügt habe, funktionierte es wieder ohne Probleme.
tl; dr Wenn Sie dies lesen, versuchen Sie es mit meinem obigen Code und tauschen Sie "urlPath" gegen Ihre eigene lokale String-URL aus.
diese Arbeit für mich
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)
}