NSURL.URLByAppendingPathComponent() 的 Swift 3 等价物是啥?
Posted
技术标签:
【中文标题】NSURL.URLByAppendingPathComponent() 的 Swift 3 等价物是啥?【英文标题】: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
以跳转到其定义。你应该很快找到你需要的方法。
【参考方案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)
【讨论】:
以上是关于NSURL.URLByAppendingPathComponent() 的 Swift 3 等价物是啥?的主要内容,如果未能解决你的问题,请参考以下文章