【问题标题】:Swift nil values behaviourSwift nil 值行为
【发布时间】:2023-03-17 22:02:02
【问题描述】:

您能否像在Objective-C 中一样向nil 中的Swift 发送消息而不会导致崩溃?

我尝试查看文档,但找不到与此相关的任何内容。

【问题讨论】:

  • 您是否尝试创建一个专门用于测试的新项目?
  • 查看“Swift 编程语言”一书中的可选链接章节。
  • @NSArray 不。我没有 OS X Yosemite,所以我无法运行最新的 XCode,我只是在网上阅读它并想知道。就是这样。

标签: objective-c swift


【解决方案1】:

不完全是,你必须使用Optional Chaining。在 swift 中,一个实例只能是 nil 如果它被声明为“可选”类型。通常看起来像这样:

var optionalString : String?

注意String之后的?这就是为什么它可能是零

除非您首先“解包”它,否则您不能对该变量调用方法,除非您使用上述可选链。

通过可选链接,您可以调用多个深度方法,所有方法都允许返回一个 nil 值:

var optionalResult = optionalString.method1()?.method2()?.method3()

optionalResult 也可以为零。如果链中的任何方法返回 nil,则不会调用它之​​后的方法,而是将 optionalResult 立即设置为 nil。

在明确处理它为 nil 的情况之前,您不能直接处理可选值。您可以通过以下两种方式之一做到这一点:

强制它盲目地展开

println(optionalString!)

如果为nil,这将抛出运行时错误,所以你应该非常确定它不是nil

测试是否为nil

您可以使用简单的 if 语句来做到这一点:

if optionalString {
    println(optionalString!)
}
else {
    // it was nil
}

或者你可以将它分配给一个作用域变量,这样你就不必强行打开它:

if let nonoptionalString = optionalString {
    println(nonoptionalString)
}
else {
   // it was nil
}

【讨论】:

  • 不是零,没有。 Swift 让 nil 可表示变得异常困难。
  • @CodaFi Optional.None 和 nil 是一回事。我也不同意这太难了,我会说它相当难
  • 有点夸张以减轻情绪;)。我从“Using Swift with Cocoa and Objective-C”中得到的印象是它们在语义上可能是等价的,但我怀疑定义上的等价性。再说一次,谁知道呢?
  • @CodaFi 啊,好吧。我认为我们确实知道 Optional.None === nil 返回 true。此外,在任何可以使用Optional.None 的地方,都可以使用nil。事实上,在视频和书中,Apple 几乎总是将其称为nil
猜你喜欢
  • 1970-01-01
  • 2016-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-05
  • 2015-07-15
  • 2016-12-20
相关资源
最近更新 更多