Swift var=str创建';appendingPathComponent'的用法不明确;错误

Swift var=str创建';appendingPathComponent'的用法不明确;错误,swift,Swift,我正在为我的班级开发一个分贝测量应用程序,我被一个不断出现的错误难住了:“appendingPathComponent的使用不明确”。以下是出现问题的地方: //设置音频文件的URL var documents: AnyObject = NSSearchPathForDirectoriesInDomains( FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userD

我正在为我的班级开发一个分贝测量应用程序,我被一个不断出现的错误难住了:“appendingPathComponent的使用不明确”。以下是出现问题的地方:

//设置音频文件的URL

    var documents: AnyObject = NSSearchPathForDirectoriesInDomains( FileManager.SearchPathDirectory.documentDirectory,  FileManager.SearchPathDomainMask.userDomainMask, true)[0] as AnyObject
    var str = documents.appendingPathComponent("recordTest.caf")
    var url = NSURL.fileURL(withPath: str as String)
错误发生在这里:

   var str = documents.appendingPathComponent("recordTest.caf")
我似乎无法解决这个问题

救命啊,,
保罗

你为什么要将
文档
转换为
任何对象
?把它扔掉

但这又带来了一个新问题,因为
附加路径组件
NSString
NSURL
URL
的一种方法。但是
文档
是一个
字符串

为什么要使用
NSURL
而不是
URL

由于您的目标是获得
URL
,因此请使用
FileManager
的更直接方法:

let docURL = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true)
let url = docURL.appendingPathComponent("recordTest.caf")

尽管您(应该)确切地知道
String
是返回的,但为什么要注释/转换
AnyObject
?不要注释编译器可以推断的类型。试试看!这很糟糕practice@OlegGordiichuk是的,通常是这样。你当然可以更新这个代码来使用<代码> do/catch > /Cord>,或者考虑用户的文档文件夹将永远存在,这不会失败。@ OLGGRIDIICHUK <代码>尝试!<如果保证尝试不会失败(如本例中),则代码>是一种良好的做法。那么错误是“var”还是上面的AnyObject行?在XCODE 8中,这是唯一阻止我创建构建的错误。绝对是AnyObject。