我想知道如何实现Swift(Int,Float ...)中的值类型以支持可选绑定("?")。 我假设这些值类型没有在堆上分配,而是在堆栈上分配。那么,它们是否依赖某种指向可能为null的堆栈的指针,或者底层struct是否包含布尔标志?
答案 0 :(得分:13)
选项在Swift中实现为enum
类型。
有关如何完成此操作的示例,请参阅Apple's Swift Tour:
enum OptionalValue<T> {
case None
case Some(T)
}
答案 1 :(得分:13)
private boolean mCacheUsed = true;
答案 2 :(得分:3)
选项如下所示实现。要找到这个,CMD-点击var x: Optional<Int>
之类的声明。 var x: Int?
只是语法糖。
enum Optional<T> : LogicValue, Reflectable {
case None
case Some(T)
init()
init(_ some: T)
/// Allow use in a Boolean context.
func getLogicValue() -> Bool
/// Haskell's fmap, which was mis-named
func map<U>(f: (T) -> U) -> U?
func getMirror() -> Mirror
}
答案 3 :(得分:3)
大多数答案只是说Swift选项是用enum
实现的,这引出了enum
实现方式的问题。必须使用类似于C中带有标记的联合的东西。例如,Swift枚举
enum Foo {
case None
case Name(String)
case Price(Double)
}
可以在C中模仿如下:
enum {FOO_NONE_, FOO_NAME_, FOO_PRICE_};
typedef struct {
int flavor; // FOO_NONE_, FOO_NAME_ or FOO_PRICE_
union {
char *Name; // payload for FOO_STRING_
double Price; // payload for FOO_DOUBLE_
} u;
}