【问题标题】:What is the default value of a basic Boolean in Swift?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 类型,因此它只有一个值选项。

标签: swift boolean


【解决方案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
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-29
相关资源
最近更新 更多