【问题标题】:How to make switch statement with optionals?如何使用选项制作 switch 语句?
【发布时间】:2016-07-19 22:04:18
【问题描述】:

我正在处理文本字段和 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 语句会使这更清晰。我只是不确定如何为这种情况制作一个。

【问题讨论】:

    标签: ios swift switch-statement optional


    【解决方案1】:

    版本 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 和/或 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
    • _: 意思是快乐,意思是我不在乎这里有什么

    【讨论】:

    • 谢谢你,我有一个愚蠢的问题,但为什么要使用 .Some?
    • @SwiftyJD:当我需要说:这里有某事时,我使用.Some
    • 我明白了,我有 8 个类别要处理,这是最有效的方法,但每个类别都替换为 nil 吗?
    • @SwiftyJD:在这种情况下,只需遵循版本 3。
    • @vacawama:感谢您指出这一点。我更新了我的答案!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多