Swift 中基本布尔值的默认值是多少?
Posted
技术标签:
【中文标题】Swift 中基本布尔值的默认值是多少?【英文标题】:What is the default value of a basic Boolean in Swift? 【发布时间】:2018-02-19 14:34:29 【问题描述】:我想了解 Swift 中的 Bool
。
如果 Bool 是基本的原始数据类型,为什么 Boolean 的默认值是 nil
?
var test: Bool!
print(test) // nil
在 Java 中,布尔默认值为 false:
Default value of 'boolean' and 'Boolean' in Java
【问题讨论】:
请链接到您所指的事物,而不是发布它的图片。 请注意,var test: Bool!
还不是 布尔值。类型已声明,但变量没有值。它是 nil,因此不是 true 也不是 false。
@GauravSaini,在 Swift 中没有 default value
这样的类型,你必须用特定的值初始化每个变量(除了 Optional<T>
有它,它是 nil
)。跨度>
@user28434 Void
也有一个隐含的默认值;试试let v: Void; print(v)
@Hamish, ok Void
是第二个例外,因为它是 Unit
类型,因此它只有一个值选项。
【参考方案1】:
Bool
、Bool!
和 Bool?
在 Swift 中都是不同的。 p>
1. Bool
是一种非可选 数据类型,可以有值 - true/false
。您需要在初始化程序中初始化它或在使用它之前声明它。
var x : Bool = false
var x: Bool
init()
x = false
2. Bool?
是一种可选 数据类型,可以有值 - nil/true/false
。要使用此类型,您需要使用if let or force unwrapping
将其解包。
var x: Bool?
if let value = x
//TODO: use value instead of x
3. Bool!
是一种隐式解包的可选数据类型,可以有值 - nil/true/false
。这里的区别是它必须在使用之前包含一个值,否则它将导致runtime exception
。由于它是隐式解包的,因此无需使用if let or force unwrapping
解包。
var x: Bool! //Must contain value before using
【讨论】:
"一个隐式展开的可选 [...] 在使用它之前它必须包含一个值,否则它将导致运行时异常" - 实际上从 Swift 3 开始,该行是真的很模糊;如果可以将 IUO 类型检查为强可选项,则可以。例如var x: Bool!; print("\(x)")
不会崩溃;它只会输出nil
。
感谢您的解释!我对 swift 还是很陌生,有时还很整洁【参考方案2】:
严格来说,在 Swift 中没有默认值。
Bool
要么是非可选的,那么您必须分配一个(默认)值
或者如果Bool
是一个可选,那么它就是nil
——就 Swift 而言没有价值。
【讨论】:
严格来说在 Swift 中有一些内在类型的默认值。对于Optional
,虽然nil
确实表示“没有值”,但它是一个文字,代表Optional
的.none
情况,因此是它的可能值之一拥有;并且与未初始化不同。所以Optional
有一个隐含的默认值.none
。它不是唯一具有默认值的类型。 Void
的默认值为()
,let v: Void; print(v)
是完全合法的。 (尽管这只是我能立即想到的具有默认值的两种类型)。【参考方案3】:
Bool
在 Swift 中不是原语。 Swift 中的一切都是对象。您的变量test
是一个Bool!
,它是一个隐式展开的可选项,默认值为nil
。
如果您使用此代码(不是可选的),
var test: Bool
print(test)
你会得到一个错误:
在初始化之前使用的变量“测试”
所以在 Swift 中你必须在使用之前初始化东西,例如:
var test: Bool = false
【讨论】:
说“Swift”中的一切都是对象并不是一个好词。Bool
是一种值类型,这就是 Java 原语。你是对的,每个非可选变量都需要初始化,默认情况下可选参数是nil
。以上是关于Swift 中基本布尔值的默认值是多少?的主要内容,如果未能解决你的问题,请参考以下文章