这一行:
cell.imageView?.setImageWithURL(NSURL(string: message.imageFile?.url?))
在最后一个可选.url?
:
Value of optional type 'String?' not unwrapped; did you mean to use '!' or '?'?
当我将其更改为:
if let url = message.imageFile?.url {
cell.imageView?.setImageWithURL(NSURL(string:url))
}
没有编译器错误。它已解开,我理解这一点。但是,我不明白为什么第一次尝试不会编译。如果message.imageFile?.url?
或nil
为imageFile?
,url?
不应该只返回nil
吗?
SWIFT代码中的OBJC方法
setImageWithURL
是来自AFNetworking库的ObjC方法,其签名为:
- (void)setImageWithURL:(NSURL *)url;
这是问题吗?在Swift中使用此方法时,url
参数是否转换为非可选参数?因此我无法通过nil
?
答案 0 :(得分:1)
NSURL
要求string
参数为非零,因此您无法传入可选值,这是您在第一个代码段中执行的操作。 message.imageFile?.url
返回一个可选值,因为它是作为可选链(?.
)的一部分调用的方法的结果。在可选链中的?
之后返回的任何内容都是可选的。
使用if-let绑定进行解包为您提供了一个非{n}的url
属性,因此可以毫无问题地用作NSURL
初始化程序的参数,因为您是在第二个片段中做。