代码之家  ›  专栏  ›  技术社区  ›  Manngo

测试是否在Swift中创建了目录

  •  0
  • Manngo  · 技术社区  · 1 年前

    根据文献记载, createDirectory 如果出现问题,可能会引发错误。但是,返回值为:

    如果创建了目录,则为true;如果设置了createIntermediates并且目录已经存在,则为true;如果发生错误,则为false。

    我想测试一个目录是已经创建还是已经存在。我想如下所示:

    do {
        let dirOK = try fileManager.createDirectory(atPath: toDirectory, withIntermediateDirectories: true)
        if dirOK {
            print("ok")
        }
        else {
            print("no")
        }
    }
    catch let error as NSError {
        print(error)
    }
    

    但是,我收到错误消息:

    无法将类型“()”的值转换为所需的条件类型“Bool”

    如何检查是否真的创建了目录?

    1 回复  |  直到 1 年前
        1
  •  1
  •   matt    1 年前

    问题是你没有阅读 docs 很好。但这不是你的错,真的;它们也写得很糟糕!在你引用的关于返回Bool的部分之后,文档开始自相矛盾:

    在Swift中,这个方法返回Void,并用throws关键字标记,表示在失败的情况下抛出错误。

    所以你的答案是:毕竟布尔没有回来。只需删除您的 dirOK 别担心。如果创建目录时出现问题 try 将失败(带有 throw 从文件管理器),您将陷入 catch 块的顺序良好。如果你到达的下一行 do 之后 这个 尝试 行,它成功了。

    do {
        try fileManager.createDirectory(atPath: toDirectory, withIntermediateDirectories: true)
        print("ok")
    }
    catch let error as NSError {
        print(error)
    }
    

    注释 一般来说,这里的模式正是大多数Objective-C错误生成方法的工作方式;如果Objective-C有“通过间接方式返回Bool并设置NSError”,Swift会自动有“不返回任何内容,如果有问题则抛出”。