用试试?运算符使代码更简洁

Use the try? operator to make the code more concise

我在 Swift 2 中有这段代码,用于将文件移动到新目的地,必要时覆盖:

let origin = "...", destination = "..."
do {
   try NSFileManager.defaultManager().removeItemAtPath(destination)  // remove existing file
} catch {}
do {
   try NSFileManager.defaultManager().moveItemAtPath(origin, toPath: destination)
} catch {}

为了让代码更简洁,而且由于我不关心抛出的错误,所以我想到了使用 try? 运算符,如下所示:

let origin = "...", destination = "..."
try? NSFileManager.defaultManager().removeItemAtPath(destination)
try? NSFileManager.defaultManager().moveItemAtPath(origin, toPath: destination)

这会创建一个编译器警告操作的结果未被使用,所以我必须添加一个未使用的 let,它看起来很糟糕:

...
let _ = try? NSFileManager.defaultManager().moveItemAtPath(origin, toPath: destination)

为了简洁起见把警告放在那儿不好吗?

请注意,您收到这些警告是因为您正在调用某些方法并且您没有处理返回值。

如果您不需要返回值,那么您应该使用 let _ = 语法明确告诉阅读此代码的其他人有意忽略返回值。

否则,如果您应该处理返回值,但由于您太懒惰或其他原因而没有这样做,那么它被认为是您软件中的错误,您绝对不应该抑制它。

在Swift3中,忽略没有额外赋值的结果是合法的。这在 Xcode 8 GM:

中编译得很好,没有警告
try? FileManager.default.removeItem(atPath: destination)

(之前顺便在bugs.swift.org上问过这个,直接被告知这个_ = try? 语法被认为是正确的,并且要向编译器——以及你自己——承认你是故意忽略返回值而付出的代价很小。因此,当您留在 Swift 2 世界时,您所做的一切都很好!)