2016-05-20 7 views
4
で不正なURLを作成する方法

私はNSURLわざわざスウィフト

public extension NSURL { 

    func getQueryItemValueForKey(key: String) -> String? { 
     guard let components = NSURLComponents(URL: self, resolvingAgainstBaseURL: false) else { 
      return nil 
     } 

     guard let queryItems = components.queryItems else { return nil } 
     return queryItems.filter { 
      $0.name == key 
      }.first?.value 
    } 

} 

私はそれのためのユニットテストを書いていますが、私は、私はいないようだと、100%のコードカバレッジを取得することができませんで、次のスウィフトの拡張子を持っていますNSURLComponents(URL: self, resolvingAgainstBaseURL: false)nilに返すことができるようにする。私が理解しているところでは、これには不正な形式のURLが必要ですが、作成するのに苦労しています。

私が試してみました:私はトラックを失った

  • let url = NSURL(string: "")
  • let url = NSURL(string: "http://www.example")
  • let url = NSURL(string: "http://www.exam ple.com")
  • let url = NSURL(string: "http://www.example.com/?param1=äëīòú")

そして、いくつか他の人を。私はこれがおそらく明らかに明白な何かであることを知っていますが、私は今は失われています。では、Swiftで不正な形式のURLを作成するにはどうすればよいですか?

+0

問題はということですがこのようにNSURLを作成するとき - let url = NSURL(string: "") - "url"はオプションで、unwrapしようとするとnilが返されます。 url?.getQueryItemValueForKeyを呼び出すと、urlがnilであるため、この呼び出しは実行されません。つまり、不正なURLの場合に呼び出されないため、NSURLComponents(...)がnilを返さないためです。 –

+0

@invisible_handいいえ、 'NSURL(string:" ")'は 'nil'ではなく、有効な' NSURL'インスタンスです。そしてもし* "あなたは[...]" *のためにNSURLComponents(...)がnilを返さない場合、なぜオプションの初期化子として宣言されますか? – luk2302

+1

ハハ、そうです。しかし、私は答えを見つけたようです。 NSURL(文字列: "\\")またはこのNSURLComponents(文字列: "\\") –

答えて

4

私の研究で見つかったとして、あなたはNSURLComponentsのためではなく、負のポート番号を使用して、NSURLのために不正な形式れるURL(おそらく必ずそこに多くの例があるではない)を生成することができます

let example = "http://example.com:-80/" 
let url = NSURL(string: example) 
print("url:\(url)") //prints out url:Optional(http://example.com:-80/) 
if let url = url { 
    let comps = NSURLComponents(URL: url, resolvingAgainstBaseURL: false) 
    print("comps:\(comps)") //prints out comps:nil 
} 
関連する問題