Swift中URL(fileURLWithPath:)为何返回/private/tmp路径?
Swift文件名解析中/private/tmp路径的问题解答
这是预期行为吗?
是,这完全符合URL(fileURLWithPath:)的默认行为。
原因解析
当你传入的是不带路径的纯文件名(比如non-empty-filename.m4v)时,URL(fileURLWithPath:)会自动把程序的当前工作目录作为这个文件的父路径。而在单元测试环境里,iOS/macOS的测试框架默认会把当前工作目录设为/private/tmp(临时沙盒目录),所以你调用url.deletingLastPathComponent().path时,拿到的就是这个默认目录的路径。
处理建议
如果你的逻辑只需要解析文件名本身,不需要关联默认路径,可以加个判断:只有当输入的文件名包含路径分隔符/时,才提取并返回path字段。示例代码如下:
// 替换原有的path处理逻辑 if filename.contains("/") { let path = url.deletingLastPathComponent().path if !path.isEmpty { ret["path"] = path } }
内容的提问来源于stack exchange,提问作者Maury Markowitz
相关产品推荐
相关产品推荐

