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】:

BoolBool!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 中基本布尔值的默认值是多少?的主要内容,如果未能解决你的问题,请参考以下文章

input placeholder 默认颜色值是多少

什么是引用数据类型以及引用和基本数据类型的默认初始值

Java 的布尔默认值是“真”吗? [复制]

Java包装类,以及Integer与int之间的比较

更改布尔值的默认值

在Java语言中,字节数据类型的关键字和默认值是( )。