什么是Swift 3等效的NSURL.URLByAppendingPathComponent()?

时间:2016-08-07 08:16:21

标签: swift xcode nsurl swift3

我跟随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接口 - 我仍然不完全了解术语)所以我将来可以自己研究这些术语吗?

3 个答案:

答案 0 :(得分:42)

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

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

同样为Leo Dabus points out in the comments,您的documentsDirectory媒体资源需要更改为在测试版4中使用urls(for:in:)

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

(请注意,我已根据Swift API design guidelines建立了您的媒体资源名称lowerCamelCase。我还建议您使用FileManager.default,而不是创建新实例。)功能

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

答案 1 :(得分:12)

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

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

<强>更新

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

有关相关信息,请参阅@Hamish

的回答

答案 2 :(得分:4)

func appendingPathComponent(String)

=&GT;返回通过将路径组件附加到原始URL而生成的新URL。

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

如果是目录:

func appendingPathComponent(String, isDirectory: Bool)

=&GT;返回通过将路径组件附加到原始URL而生成的新URL,以及如果将组件指定为目录,则使用尾部斜杠。

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