我有一个Swift类,该类需要能够接收目录URL或文件URL。在第二种情况下,它必须获取文件的目录URL并从那里开始工作。
我有以下代码:
public class ImageManager {
private var _file_manager: FileManager
private var _directory : URL;
private var _images : [URL];
init(url: URL) throws {
_file_manager = FileManager.default;
if (url.hasDirectoryPath) {
_directory = url;
} else {
_directory = URL.init(fileURLWithPath: url.deletingLastPathComponent().path, isDirectory: true);
}
let options = FileManager.DirectoryEnumerationOptions.skipsHiddenFiles;
let files = try _file_manager.contentsOfDirectory(at: _directory, includingPropertiesForKeys: nil, options: options);
_images = files.filter(ImageManager.isImageFile);
if (_images.count == 0) {
throw ImageManagerError.NoImagesInDirectory(url: _directory);
}
//rest of init...
}
//rest of class...
}
如果传递的url
参数是目录,则一切正常。但是,如果url
参数来自文件,则行let files = try _file_manager.contentsOfDirectory(at: _directory, includingPropertiesForKeys: nil, options: options);
会引发以下异常:
Error Domain = NSCocoaErrorDomain
Code = 257“无法打开文件“壁纸”,因为您没有查看权限。”
UserInfo = {
NSURL = file:/// Users / asanzana / Pictures / Wallpapers,
NSFilePath = /用户/ asanzana /图片/墙纸,
NSUnderlyingError = 0x600000c72c70 {
Error Domain = NSPOSIXErrorDomain
代码= 1“不允许操作”}}
那么,在Swift中获取文件包含目录作为URL的正确方法是什么?请记住,这是用于 macOS ,而不是iOS。