【问题标题】:'stringByAppendingPathComponent' is unavailable“stringByAppendingPathComponent”不可用
【发布时间】:2015-11-14 05:36:11
【问题描述】:

我收到了错误

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

当我尝试做的时候

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

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

Apple 开发者论坛上的This thread 建议使用扩展程序或直接转换为NSString。但如果我确实将其转换为 NSString

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

然后我得到错误

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

它让我可以通过插入 as String 来“修复”它,这让我们回到了原来的错误。

stringByAppendingPathExtension 也会发生这种情况。

我该怎么办?

【问题讨论】:

    标签: ios swift path


    【解决方案1】:

    您可以创建 URL 而不是字符串路径。

    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
    

    在您提到的thread 中有一些讨论,Apple 可能故意引导人们使用 URL 而不是字符串路径。

    另请参阅:

    【讨论】:

      【解决方案2】:

      你可以使用:

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

      【讨论】:

      • 虽然这行得通,但是在 Swifts String 而不是 NSString 中看到这个方法会很棒...
      猜你喜欢
      • 2015-12-06
      • 1970-01-01
      • 2011-06-25
      • 2015-11-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多