我有以下一行:
let jsonResults = NSData(contentsOfURL: Fetcher.URLforLicenseInfo())
这编译并执行正常,但如果NSData的初始化失败,我会在代码中稍后得到异常。我试图添加另一行:
if jsonResults != nil { ///blah, blah...
然后编译器抱怨"Cannot invoke '!=' with an argument list type '(NSData, NilLiteralConvertible)"
编译器是否应该将NSData初始化返回类型识别为可选的?
答案 0 :(得分:3)
检查数据的长度:if(data.length > 0) ...
答案 1 :(得分:2)
NSData
初始化工具永远不会返回nil
。另一方面,当你写jsonResults != nil
时,jsonResults
意味着可选择if jsonResults != nil {}
,但不是。
jsonResults.length
条件毫无意义。
相反,您可以检查数据对象if != nil
何时使用func toJson() -> NSData? {
return nil // dummy
}
let jsonResults:NSData? = toJson() // jsonResults must be optional
if jsonResults != nil{
println(jsonResults!.length) // The number of bytes contained by the data object.
}
声明?
请考虑以下示例:
jsonResults
注意:由于let
是常量(又名nil
),因此只读变量,您无法在其中进行更改未来,即使这个值得到extension NSData {
// ...
init(contentsOfURL url: NSURL)
// ...
}
参考的
{{1}}