【问题标题】:Explicitly specified type 'NSURL?' issue while updating to Swift 3明确指定类型“NSURL?”更新到 Swift 3 时出现问题
【发布时间】:2017-01-07 10:07:50
【问题描述】:

我在将我的 iOS 应用代码更新到最新版本的 Swift 时遇到问题。

我有一个函数:

public class func gifWithURL(gifUrl:String) -> UIImage? {
    // Validate URL
    guard let bundleURL:NSURL? = NSURL(string: gifUrl)
        else {
            print("SwiftGif: This image named \"\(gifUrl)\" does not exist")
            return nil
    }

    // Validate data
    guard let imageData = NSData(contentsOf: bundleURL! as URL) else {
        print("SwiftGif: Cannot turn image named \"\(gifUrl)\" into NSData")
        return nil
    }

    return gifWithData(data: imageData)
}

我在以下行收到警告:

guard let bundleURL:NSURL? = NSURL(string: gifUrl)

并收到警告:

明确指定类型'NSURL?'为初始化器添加了额外的可选级别,使可选检查始终成功

Xcode 允许我自动修复问题。当我执行此自动修复时,我的代码更改为:

guard let bundleURL:NSURL NSURL(string: gifUrl)

这显然不是正确的语法。

我不确定需要添加/删除什么才能使我的代码完全符合 Swift 3 标准并正常工作。

【问题讨论】:

    标签: swift swift3 nsurl


    【解决方案1】:

    NSURL(string:) 将返回可选的NSURL? 实例,并且您已经可以选择用guard 包装它,因此请删除: NSURL?,因为您要再次设置它optional 而不是non-optional,也在Swift 3 中使用原生 URLData 而不是 NSURLNSData。整个代码会是这样的。

    guard let bundleURL = URL(string: gifUrl), let imageData = try? Data(contentsOf: bundleURL) else {
         print("SwiftGif: This image named \"\(gifUrl)\" does not exist")
         return nil
    }
    //Access the imageData here
    

    注意:Data(contentsOf:) 会出现throws 异常,因此您需要使用do try catch 块来捕获它。

    【讨论】:

      【解决方案2】:

      你做的太复杂了。在 Swift 3 中,我们不使用 NSURL。只是URL

      guard let bundleURL = URL(string: gifUrl) else {
          print("SwiftGif: This image named \"\(gifUrl)\" does not exist")
          return nil
      }
      

      那么你也可以摆脱危险的强制施法:

      guard let imageData = NSData(contentsOf: bundleURL) else {
          print("SwiftGif: Cannot turn image named \"\(gifUrl)\" into NSData")
          return nil
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-11-20
        • 2021-06-29
        • 2015-12-25
        • 2023-02-02
        • 1970-01-01
        • 2020-09-18
        • 2016-12-18
        相关资源
        最近更新 更多