【发布时间】:2018-01-31 22:29:34
【问题描述】:
tl;dr
是否可以使用Void 类型的关联值来实例化通用 Swift 4 枚举成员?
背景
我正在使用一个简单的 Result 枚举(类似于antitypical Result):
enum Result<T> {
case success(T)
case error(Error?)
}
现在我想用这个枚举来表示一个不会产生实际结果值的操作的结果;操作要么成功,要么失败。为此,我将类型定义为 Result<Void>,但我正在努力创建 Result 实例,let res: Result<Void> = .success 和 let res: Result<Void> = .success() 都不起作用。
【问题讨论】:
-
你确定第二种方式吗?看起来它可以工作swift.sandbox.bluemix.net/#/repl/599d61b1b459cc41aee76d9d
-
有趣,谢谢你的例子。我重新检查了,但在 Xcode 9 Beta 5 中我得到了
Missing argument for parameter #1 in call。 -
@Hamish:你可能是对的(我还在 SE-0110 和 SE-0029 ... :)
-
@Hamish:这也可能是 SE-0029 的结果:“构造函数”
let f = Result<Void>.success在 Swift 3 和 4b5 中都具有(Void) -> Result<Void>类型。在 Swift 3 中你可以调用let r = f(),在 4b5 中你必须添加一个参数:let r = f(())