2016-05-26 27 views
0

私は、このように文字列でNSURLを使用しようとしています:私はしたい"Unknown""Name"スウィフト奇妙な文字列

の間にスペースがあるので

var name = "Unknown Name" 
let SearchString = "http://xxx?name=\(name)" 
let SearchURL = NSURL(string: SearchString) 

はしかし、SearchURLはゼロになり、例外がスローされますname変数の先頭と最後に一重引用符を追加しますが、次のようにしているため、できません:

let SearchString = "http://xxx?name='\(name)'" 

そして、私は、デバッガで検索文字列を追跡するとき、私はそれが次の内容が含まれていた:

http://xxx?name=\'Unknown Name\' 

、それが再び例外をスローします。

これらの奇妙なバックスラッシュを削除し、一重引用符を使用する方法は、URLを使用することができます。

+1

http://stackoverflow.com/questions/24551816/swift-encode-url –

答えて

2

nameにスペースをエンコードする必要があります。 stringByAddingPercentEncodingWithAllowedCharacters戻っnilはiOSの7から始まっクラッシュ

+0

を行う必要がありますそれは私の問題の仲間を解決した。そして、私の仕事が簡単になるようなものがあることはわかりません。ありがとう。 – FamousMaxy

+0

心配しない@FamousMaxy - Xcodeで 'URLQueryAllowedCharacterSet'をコマンドクリックすると、URLのさまざまな部分をエンコードするためのいくつかのオプションが表示されます –

1

があるだろう場合 - あなたはURLQueryAllowedCharacterSet

var name = "Unknown Name".stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())! 
... 


!のunsafenessでstringByAddingPercentEncodingWithAllowedCharactersを使用することにより、これを行う(や他の特殊文字をエンコード)することができますNSStringクラスにメソッドstringByAddingPercentEncodingWithAllowedCharactersがあります。このメソッドは、指定されたセットにないすべての文字を%エンコードされた文字で置き換えることによって、受信者から作成された新しい文字列を返します。

var originalString = "Unknown Name" 
var escapedString = originalString.stringByAddingPercentEncodingWithAllowedCharacters(.URLQueryAllowedCharacterSet()) 
println("escapedString: \(escapedString)") 

URLQueryAllowedCharacterSetには、URLクエリ文字列に許可されているすべての文字が含まれています。

出力:

Unknown%20Name 

ので

var name = "Unknown Name" 
var escapedName = name..stringByAddingPercentEncodingWithAllowedCharacters(.URLQueryAllowedCharacterSet()) 
let SearchString = "http://xxx?name=\(escapedName)" 
let SearchURL = NSURL(string: SearchString) 

にコードを変更するとトリック