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

我在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 {
            $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(字符串:“http://www.exam ple.com”)
> let url = NSURL(字符串:“http://www.example.com/?param1=äëīòú”)

还有一些我忘记了.我知道这可能是显而易见的事情,但此刻我迷失了.那么,如何在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
}

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...