如何使用选项制作 switch 语句?

How to make switch statement with optionals?

我正在处理文本字段和 json 数据。我想测试 json 数据是否为 ​​!= nil,如果是,则我用该信息填充它的字段,如果它是 == nil,则我在其字段中放置一个占位符。像这样:

   if memberInfo?.createDate != nil {

    self.activeSinceTextField.text = stringToDateToString((memberInfo?.createDate)!)

  } else {
    placeHolder("Enter Here".localized())
    self.activeSinceTextField.attributedPlaceholder = placeHolderText
  }

  if memberInfo?.birthDate != nil

  {self.birthdayTextField.text = stringToDateToString((memberInfo?.birthDate)!)

  } else

  {     placeHolder("Enter Here".localized())
    self.birthdayTextField.attributedPlaceholder = placeHolderText
  }

我有很多字段,我认为 switch 语句会使它更清晰。我只是不确定如何为这种情况制作一个。

版本 1

这就是你如何用 switch

定义 4 个结果
switch (memberInfo?.createDate, memberInfo?.birthDate) {
case (.Some, .Some): break
case (.Some, nil): break
case (nil, .Some): break
case (nil, nil): break
}

现在只需将 break(s) 替换为您要为每个场景执行的代码。

版本 2

这里 createDate and/or birthDate 可用时展开

switch (memberInfo?.createDate, memberInfo?.birthDate) {
case (let .Some(createDate), let .Some(birthDate)):
    print(createDate, birthDate)
case (let .Some(createDate), .None):
    print(createDate)
case (.None, let .Some(birthDate)):
    print(birthDate)
case (.None, .None):
    print("Both are nils")
}

图例

  • .Some: 表示这里有东西
  • .None: 表示这是 nil
  • _: means is a jolly, 意思是我不在乎这里有什么