【问题标题】:What is the Swift 3 equivalent of NSURL.URLByAppendingPathComponent()?NSURL.URLByAppendingPathComponent() 的 Swift 3 等价物是什么?
【发布时间】:2016-12-13 05:27:12
【问题描述】:

我正在关注 a basic tutorial 在 Swift 中构建一个简单的 iOS 应用程序。

它是用 Swift 2.x 编写的,我使用 XCode 8 Beta 和 Swift 3。

本教程建议使用NSFileManager 查找数据目录。类名已更改,因此自动修复的 Swift 3 如下所示:

static let DocumentsDirectory = FileManager().urlsForDirectory(.documentDirectory, inDomains:.userDomainMask).first!
static let ArchiveURL = DocumentsDirectory.URLByAppendingPathComponent("meals")

然而,Xcode 现在抱怨

Value of type 'URL' has no member 'URLByAddingPathComponent'

我现在无法找出该方法的名称。

NSURL Class Reference 不包含任何关于如何从 Swift 3 解决它的提示

  • 新方法名称是什么?

  • 我必须去哪里找到 Swift 3 的完整类引用(或者,定义 URL 类的库的 Swift 3 接口 - 我仍然不完全理解命名法)这样我以后可以自己研究这些吗?

【问题讨论】:

  • 只是 .appendingPathComponent(
  • 你应该更新到 beta 4
  • 更新后您的代码将再次更改。您将需要对文档目录使用 urls(for:in:) 方法,并且 appendingPathComponent 将不再抛出。干净多了
  • 顺便说一下,你可能想FileManager.default而不是FileManager()
  • 您也可以在 Xcode 编辑器中 cmd-click URL 以跳转到其定义。你应该很快找到你需要的方法。

标签: swift xcode nsurl swift3


【解决方案1】:

从 Xcode 8 beta 4 开始,它被命名为 appendingPathComponent(_:),并且不会抛出。

static let archiveURL = documentsDirectory.appendingPathComponent("meals")

Leo Dabus points out in the comments 一样,您的documentsDirectory 属性需要更改为在beta 4 中使用urls(for:in:)

static let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]

(请注意,我已将您的属性名称设为 lowerCamelCase,与 Swift API design guidelines 一致。我还建议使用 FileManager.default,而不是创建新实例。)

您可以查看Apple's latest API reference guide,了解 Swift 3 中发生的 API 命名更改。

【讨论】:

    【解决方案2】:

    它现在已更改为 appendingPathComponent(_:) 并且它会抛出,所以你需要将它包装在 do - catch 块中

    do {
      let archiveURL = try documentsDirectory?.appendingPathComponent("meals")
    } catch {
      print(error)
    }
    

    更新

    根据 Xcode 8 beta 4,appendingpathcomponent(_:) 不会抛出错误。

    相关信息见@Hamish的回答

    【讨论】:

      【解决方案3】:
      func appendingPathComponent(String)
      

      => 返回通过将路径组件附加到原始 URL 的新 URL。

      static let archiveURL = documentsDirectory?.appendingPathComponent("meals")
      

      如果是目录:

      func appendingPathComponent(String, isDirectory: Bool)
      

      => 返回通过将路径组件附加到原始 URL 生成的新 URL,如果组件被指定为目录,则带有尾部斜杠。

      static let archiveURL = documentsDirectory?.appendingPathComponent("meals", isDirectory: true)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-08-12
        • 2014-08-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-24
        • 2014-07-31
        相关资源
        最近更新 更多