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