web-dev-qa-db-ja.com

文字列をNSURLに変換すると、swift=

StringNSURLに変換しようとしていますが、そのためのコードは以下のとおりです。

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

コンソールは次のようなものを出力します:

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

remoteUrlnilであり、ここで何が問題なのかわかりません。

その後、次のようにStringを並べ替えます:

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

コンソール印刷:

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)

これは正常に機能しています。

だから誰も私の最初のケースの何が悪いのか教えてもらえますか?

39
Dharmesh

Martin Rが示唆したように、 [〜#〜] this [〜#〜] postを参照し、そのObjective-CコードをSwiftに変換しました。このコード:

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)

これは正常に機能しています。

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

blwintersが言ったように、Swift 3.で使用

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

私はこれを試してみて、それは私にとって完璧に働くと思います

  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

NSURLがnullで、Webビュー経由でhttp URLをロードしようとすると、次のエラーが表示される場合があります。

fatal error: unexpectedly found nil while unwrapping an Optional value

安全にするために、以下を使用する必要があります。

 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

NSURLに変換される不正な文字列を修正する安全な方法は、「guard let」を使用してurlPath文字列変数をアンラップすることです

guard let url = NSURL(string: urlPath.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed)!)
            else
            {
                print("Couldn't parse myURL = \(urlPath)")
                return
            }

上記の例の「urlPath」という変数は、コードのどこかで既に宣言したURL文字列になります。

文字列がNSURLになった時点でXCodeが壊れるnilエラーがランダムに発生していたため、この答えに出会いました。 URLを印刷したときでも、それがランダムだった理由に関する論理はありません。 .addingPercentEncodingを追加すると、問題なく動作するようになりました。

tl; drこれを読んでいる人は、上記のコードを試して、独自のローカル文字列urlの「urlPath」を交換してください。

0

私のためのこの仕事

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