wake-up-neo.com

Convert String in NSURL ist in Null schnell zurück

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?

36
Dharmesh Kheni

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.latitud‌​e),\(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.latitud‌​e),\(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)
69
Dharmesh

wie blwinters sagte, in swift 3.0 use

URL(string: urlPath.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!)
34
djdance

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!)")
1
Ilesh

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))

}
1
Arvind

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.

0

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)
}
0