我在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)
为了简明起见,在那里发出警告是不是很糟糕?
答案 0 :(得分:3)
在Swift 3中,如果没有额外的赋值,忽略结果是合法的。这在Xcode 8 GM中编译得很好,没有任何警告:
try? FileManager.default.removeItem(atPath: destination)
(顺便说一句,顺便提一句,我在bugs.swift.org上询问了这个问题,直接告诉我_ = try?
语法被认为是正确的,并且为了向编译器(以及您自己)承认您故意忽略返回的值而付出的代价很小。所以当你留在Swift 2世界时,你正在做的就好了!)
答案 1 :(得分:0)
请注意,您有这些警告,因为您正在调用某个方法而不处理返回值。
如果您不需要返回值,那么您应该使用let _ =
语法明确告诉读取此代码的其他人故意忽略返回值。
否则,如果你应该处理返回值,但你还没有这样做,因为你太懒或者其他原因那么它被认为是你软件中的一个错误,你绝对不应该压制它。