Xcode 9.2中FileManager.fileExists报错:Bool类型不匹配问题求助
解决FileManager.fileExists(atPath:)的类型不匹配错误
嘿,我一眼就揪出问题啦!你这里犯了Swift开发里一个挺常见的小错误——把实例方法当成类方法来调用了。
问题根源
FileManager的fileExists(atPath:)是个实例方法,必须通过FileManager的实例来调用,而不是直接用类名FileManager去调用。你现在的写法FileManager.fileExists(...)编译器找不到对应的类方法,就抛出了这个看似类型不匹配的误导性提示(本质是方法调用方式错误)。
另外还有个容易忽略的细节:documentDirectory.appendingPathComponent("newname.pdf")返回的是URL类型,而fileExists(atPath:)需要的是String类型的文件路径,所以得把URL转成字符串才行。
修正后的代码
// 先拼接出完整的文件URL,再转成字符串路径 let targetFileURL = documentDirectory.appendingPathComponent("newname.pdf") if !FileManager.default.fileExists(atPath: targetFileURL.path) { // 这里写你的业务逻辑,比如创建文件之类的操作 }
FileManager.default是系统提供的共享文件管理器实例,绝大多数场景下用它就够啦。
额外小贴士
如果是Swift 5及以上版本,其实还可以用更优雅的URL判断方式:
if !FileManager.default.fileExists(at: targetFileURL) { // 这个方法直接接受URL参数,不用手动转路径字符串 }
不过考虑到你用的是Xcode 9.2(对应Swift 4.0左右),fileExists(at:)可能还没上线,所以还是用path转字符串的方式更稳妥。
内容的提问来源于stack exchange,提问作者Riku Virta
相关产品推荐
相关产品推荐

