两深可选属性

时间:2015-06-07 03:52:59

标签: swift

  1. 这一行:

    cell.imageView?.setImageWithURL(NSURL(string: message.imageFile?.url?))

  2. 在最后一个可选.url?

    上导致此XCode警告
    Value of optional type 'String?' not unwrapped; did you mean to use '!' or '?'?
    
    1. 当我将其更改为:

      if let url = message.imageFile?.url { cell.imageView?.setImageWithURL(NSURL(string:url)) }

    2. 没有编译器错误。它已解开,我理解这一点。但是,我不明白为什么第一次尝试不会编译。如果message.imageFile?.url?nilimageFile?url?不应该只返回nil吗?

      SWIFT代码中的OBJC方法 setImageWithURL是来自AFNetworking库的ObjC方法,其签名为:

      - (void)setImageWithURL:(NSURL *)url;
      

      这是问题吗?在Swift中使用此方法时,url参数是否转换为非可选参数?因此我无法通过nil

1 个答案:

答案 0 :(得分:1)

NSURL要求string参数为非零,因此您无法传入可选值,这是您在第一个代码段中执行的操作。 message.imageFile?.url返回一个可选值,因为它是作为可选链(?.)的一部分调用的方法的结果。在可选链中的?之后返回的任何内容都是可选的。

使用if-let绑定进行解包为您提供了一个非{n}的url属性,因此可以毫无问题地用作NSURL初始化程序的参数,因为您是在第二个片段中做。