如何在 Swift 中故意创建格式错误的 URL

How to purposely create a malformed URL in Swift

我在 NSURL

上有以下 Swift 扩展
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 {
            [=12=].name == key
            }.first?.value
    }

}

我正在为其编写单元测试,但我无法获得 100% 的代码覆盖率,因为我似乎无法获得 NSURLComponents(URL: self, resolvingAgainstBaseURL: false) 到 return nil。据我了解,这需要一个格式错误的 URL,但我正在努力创建一个。

我试过:

还有一些我忘记了。我知道这可能是显而易见的事情,但我现在迷路了。那么,如何在 Swift 中创建格式错误的 URL?

正如我在研究中发现的那样,您可以通过使用负端口号(可能有更多情况但不确定)生成一个对于 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
}