如何在Swift中完成?编译错误是"无法调用' =='使用类型'的参数列表(NSURL,NilLiteralConvertible)'"
var request = NSURLRequest()
if request.URL == nil {
}
似乎正常模式是在对象可能没有值时声明类型是可选的。
但是在这种情况下,我不确定为什么Apple没有将URL属性声明为NSURLRequest类中的可选var。
答案 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)
你不是。 URL
是NSURLRequest
的非可选,只读变量。
如果你保持快速,则此参数无法为零。除非你使用NSURLRequest()
初始化程序,这是毫无意义的,因为URL是只读的,你无法设置它。
使用其中一个指定的初始值设定项。或者使用NSMutableURLRequest
,其中URL
变量不是只读的,而是可选的。