'stringByAppendingPathComponent'不可用

Sur*_*gch 14 path ios swift

我收到了错误

'stringByAppendingPathComponent' is unavailable: Use 'stringByAppendingPathComponent' on NSString instead.
Run Code Online (Sandbox Code Playgroud)

当我尝试做的时候

let documentsFolder = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String
let databasePath = documentsFolder.stringByAppendingPathComponent("test.sqlite")
Run Code Online (Sandbox Code Playgroud)

这显然对以前的人有用,但现在在Xcode 7 beta 5中对我不起作用.

这个线程在苹果开发者论坛不得不使用分机或直接做投地的建议NSString.但如果我把它转换为NSString

let databasePath = documentsFolder.stringByAppendingPathComponent("test.sqlite" as NSString)
Run Code Online (Sandbox Code Playgroud)

然后我得到了错误

'NSString' is not implicitly convertible to 'String'...
Run Code Online (Sandbox Code Playgroud)

它让我可以选择通过插入来"修复它" as String,这会让我们回到原来的错误.

这也适用于stringByAppendingPathExtension.

我该怎么办?

Sur*_*gch 26

您可以创建URL而不是String路径.

let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first
let fileURL = documentsURL?.appendingPathComponent("test.sqlite")
Run Code Online (Sandbox Code Playgroud)

如果你绝对需要路径,那么你可以这样得到它:

guard let path = fileURL?.path else {
    return
}

print(path) // path will exist at this point
Run Code Online (Sandbox Code Playgroud)

在您提到的主题中有一些讨论,Apple可能会故意指导人们使用URL而不是String路径.

也可以看看:


ati*_*ruz 11

您可以使用:

let dbPath = (documentsFolder as NSString).stringByAppendingPathComponent("db.sqlite")
Run Code Online (Sandbox Code Playgroud)

  • 虽然这是有效的,但在Swifts String而不是NSString中看到这个方法会很棒... (2认同)