我正在尝试在 Swift 中重新实现 Optional
。我称之为 Maybe
。我有 2 个初始化,用于创建空版本或 nil 版本,以及一个包含通用类型的版本:
enum Maybe<T>{
case Nothing
case Something(T)
init(){
self = .Nothing
}
init(_ something: T){
self = .Something(something)
}
}
但是,当我尝试创建一个空的 Maybe
时,不会调用 init()
初始化程序。相反,另一个 init(_ something: T)
是用 T = ()
调用的。
这是怎么回事?为什么不带参数的init会被忽略?
var z = Maybe() // this calls init(_ something: T) with T = ()
最佳答案
例如,Swift 编译器需要一些上下文来推断类型 T
var foo = Maybe<Int>()
var bar : Maybe<String> = Maybe()
同样的问题会发生在
let x = Optional()
switch x {
case .None:
println("None")
case .Some(let y):
println("Some \(y)")
}
它打印 Some ()
并导致编译器警告
warning: variable 'x' inferred to have type 'Optional<()>', which may be unexpected
关于swift - Swift 枚举中的默认初始化被忽略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26314603/