“stringByAppendingPathComponent”不可用

我收到错误

'stringByAppendingPathComponent' is unavailable: Use 'stringByAppendingPathComponent' on NSString instead. 

当我尝试做

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

这显然以前工作的人,但它现在不适用于我在Xcode 7testing版5。

苹果开发者论坛上的这个线程有build议使用扩展或直接转换为NSString 。 但是,如果我把它转换成NSString

 let databasePath = documentsFolder.stringByAppendingPathComponent("test.sqlite" as NSString) 

那么我得到的错误

 'NSString' is not implicitly convertible to 'String'... 

它给了我通过插入as String “修复它”的选项,这使我们回到原来的错误。

这也发生在stringByAppendingPathExtension

我该怎么办?

您可以创build一个URL而不是一个stringpath。

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

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

 guard let path = fileURL?.path else { return } print(path) // path will exist at this point 

在你提到的这个话题中有一些讨论,苹果可能会故意指导人们使用URL而不是Stringpath。

也可以看看:

  • iOS中的path和url有什么区别?
  • NSFileManager的URL与path
  • Swift 2.0:为什么守卫比If好?

您可以使用:

 let dbPath = (documentsFolder as NSString).stringByAppendingPathComponent("db.sqlite")