【问题标题】:Swift: Is there a more succinct way to write the "if let" block below?斯威夫特:有没有更简洁的方法来编写下面的“if let”块?
【发布时间】:2016-02-24 20:27:11
【问题描述】:
   if let phone = participant.phone {
                participantObject["phone"] = phone
            } else { print("Did not add phone") }

我需要解开一个“字符串?”并且仅在可选项不是 nil 时才进行赋值

【问题讨论】:

  • 您可以使用Optionalmap() 方法(有关类似问题,请参阅stackoverflow.com/questions/34698272/…)。但这并不能使它更易读。
  • 你可以试试participantObject["phone"] = participant.phone ?? participantObject["phone"],如果participant.phone不为nil,则使用participant.phone,否则将self赋值给self

标签: swift if-statement optional


【解决方案1】:

由于将 nil 值分配给 Swift 字典会删除键,因此您可以轻松地使用以下语法:

participantObject["phone"] = participant.phone

除非您想保留现有值。那么没有比你更好的语法了。


但是,如果您想在 phonenil 时分配替代值,请使用 nil coalescing 运算符。

participantObject["phone"] = participant.phone ?? "n/a"

【讨论】:

  • 虽然了解?? 运算符很有用,但我绝对建议不要以这种方式使用它。在程序的其他地方使用if let phone = participantObject["phone"] 比必须测试该值是否等于"n/a" 要容易得多。
  • 如果您想在屏幕上显示电话号码,?? 运算符将非常有用:您可以使用类似phoneLabel.text = participantObject["phone"] ?? "n/a"
【解决方案2】:

你可以简单地使用

participatnObject["phone"] = participant.phone

因为如果participant.phone 不是nil,此代码只会设置键"phone" 的值。唯一的区别是此代码将删除 "phone" 键的先前值(如果存在),而您的代码不会发生这种情况。

如果您还需要在没有完成分配的情况下打印一条消息,那么您的代码是非常理想的。不过这稍微短一些:

participatnObject["phone"] = participant.phone
if participant.phone == nil { print("Did not add phone") }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-12
    • 1970-01-01
    • 2022-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-01
    相关资源
    最近更新 更多