提问人:Pekka 提问时间:8/7/2016 最后编辑:ForgePekka 更新时间:1/17/2017 访问量:18137
什么是 NSURL 的 Swift 3 等价物。URLByAppendingPathComponent()?
What is the Swift 3 equivalent of NSURL.URLByAppendingPathComponent()?
问:
我正在学习一个关于在 Swift 中构建一个简单的 iOS 应用程序的基本教程。
它是用 Swift 2.x 编写的,我使用 XCode 8 Beta 和 Swift 3。
本教程建议使用 来查找数据目录。类名已更改,因此自动修复的 Swift 3 如下所示:NSFileManager
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 类参考不包含任何关于如何在 Swift 3 中解决它的提示
新方法名称是什么?
我必须去哪里找到 Swift 3 的完整类参考(或者,定义类的库的 Swift 3 接口 - 我仍然不完全理解命名法),以便将来我可以自己研究这些?
URL
答:
它现在已经更改为 and it throws,因此您需要将其包装在 do - catch 块中appendingPathComponent(_:)
do {
let archiveURL = try documentsDirectory?.appendingPathComponent("meals")
} catch {
print(error)
}
更新
根据 Xcode 8 beta 4,appendingpathcomponent(_:)
不会抛出错误。
有关相关信息,请参阅@Hamish的回答
从 Xcode 8 beta 4 开始,它被命名为 appendingPathComponent(_:),
并且不会抛出。
static let archiveURL = documentsDirectory.appendingPathComponent("meals")
此外,正如 Leo Dabus 在评论中指出的那样,您的属性需要更改为在 beta 4 中使用 urls(for:in:):
documentsDirectory
static let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
(请注意,根据 Swift API 设计指南,我已将您的属性名称设为 lowerCamelCase
。我还建议使用 FileManager.default
,而不是创建新实例。
您可以查看 Apple 最新的 API 参考指南,了解 Swift 3 中发生的 API 命名更改。
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)
评论
FileManager.default
FileManager()
URL