你如何检查NSURLRequest.URL是否为零?

时间:2014-11-14 20:37:58

标签: ios swift

如何在Swift中完成?编译错误是"无法调用' =='使用类型'的参数列表(NSURL,NilLiteralConvertible)'"

    var request = NSURLRequest()
    if request.URL == nil {
    }

似乎正常模式是在对象可能没有值时声明类型是可选的。

但是在这种情况下,我不确定为什么Apple没有将URL属性声明为NSURLRequest类中的可选var。

3 个答案:

答案 0 :(得分:3)

因为这会对正常(并且唯一有意义的)用例造成痛苦。正常的用例是调用指定的初始化程序(initWithURL:),或者使用真实URL调用指定的初始值设定项。因此,在所有普通代码中,您每次都必须卸载NSURL?。那会很快变老。

如果这是一个从头开始的Swift对象,那么它就没有公共init(),但你不能删除它,因为它是合法的(虽然没有意义)ObjC。 (好吧,也许他们可以删除它;这可能值得用雷达标记其init()私有。)

因此,这是与ObjC一样的妥协 - 通常编程与ObjC作为法律语法。围绕从Swift调用Cocoa的许多奇怪归结为此。

如果ObjC开发使用[[NSURLRequest alloc] init]作为常见模式,那么URL肯定是可选的。 ObjC devs几乎从不这样做,所以事实并非如此。

请注意,如果您发现自己处于NSURLRequest()似乎有用的情况,那么几乎可以肯定的是,使用NSURLRequest?代替的确是正确答案。

答案 1 :(得分:1)

好问题。幸运的是,request.URL.absoluteString是可选的。我认为这将满足您的需求:

if (request.URL.absoluteString == nil) { ... }

或者,由于NSMutableURLRequest在获取URL时使用了可选项,因此另一个选项是使用NSMutableURLRequest(),如果它适用于您的用例。

var request = NSMutableURLRequest()
if (request.URL == nil) { ... }

答案 2 :(得分:1)

你不是。 URLNSURLRequest的非可选,只读变量。

如果你保持快速,则此参数无法为零。除非你使用NSURLRequest()初始化程序,这是毫无意义的,因为URL是只读的,你无法设置它。

使用其中一个指定的初始值设定项。或者使用NSMutableURLRequest,其中URL变量不是只读的,而是可选的。