如何在Swift中实现可选值?

Pie*_*ier 19 optional swift

我想知道如何实现Swift(Int,Float ...)中的值类型来支持可选绑定("?").我假设这些值类型没有在堆上分配,而是在堆栈上分配.那么,它们是否依赖某种指向可能为null的堆栈的指针,或者底层struct是否包含布尔标志?

Ash*_*lls 13

Optionals enum在Swift 中实现为类型.

有关如何完成此操作的示例,请参阅Apple的Swift Tour:

enum OptionalValue<T> {
    case None
    case Some(T)
}
Run Code Online (Sandbox Code Playgroud)

  • 然后我想问题是......如何实现枚举?:) (7认同)

Ugo*_*ino 13

Swift从昨天开始就是开源的.您可以在GitHub上看到实现:https://github.com/apple/swift/blob/master/stdlib/public/core/Optional.swift

public enum Optional<Wrapped> : ExpressibleByNilLiteral {

    case none
    case some(Wrapped)

    public init(_ some: Wrapped) { self = .some(some) }

    public init(nilLiteral: ()) {
        self = .none
    }

    public var unsafelyUnwrapped: Wrapped {
        get {
            if let x = self {
                return x
            }
            _debugPreconditionFailure("unsafelyUnwrapped of nil optional")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)