【问题标题】:Is there any way to simplify complex if else statement in swift?有什么方法可以快速简化复杂的 if else 语句?
【发布时间】:2022-06-11 03:23:36
【问题描述】:

我有一个很长的 if else 条件来将文本分配给 UILabel。所以我正在寻找一个更好的选择/逻辑来写更少的行数。 以下是我的情况,

if numberOfTeachers == 4 && numberOfStudents == 27 {
      if String(interval.day! + 1) == "1" {
        self.daysLabel.text = "1st"
        self.testLabel.isHidden = true
        self.subjectLabel.text = "Physics"
        self.dayTitleLabel.text = "Today is your first day"
      } else if String(interval.day! + 1) == "2" {
        self.daysLabel.text = "2nd"
        self.testLabel.isHidden = true
        self.subjectLabel.text = "Chemistry"
        self.dayTitleLabel.text = "Today is your Second day"
      } else if String(interval.day! + 1) == "3" {
        self.daysLabel.text = "3rd"
        self.subjectLabel.isHidden = true
        self.unitLabel.text = "Mathematics"
        self.dayTitleLabel.text = "Today is your Third day"}  
else if String(interval.day! + 1) == "4" {
        self.daysLabel.text = "4th"
        self.testLabel.isHidden = false
        self.subjectLabel.text = "Physics"
        self.dayTitleLabel.text = "Today is your fourth day"      }
else if numberOfTeachers == 4 && numberOfStudents == 28 {
        
 } else if numberOfTeachers == 4 && numberOfStudents == 29 {
        
 } else if numberOfTeachers == 4 && numberOfStudents == 30 {
        
 } else if numberOfTeachers == 5 && numberOfStudents == 27 {
        
 } else if numberOfTeachers == 5 && numberOfStudents == 28 {
        
 } else if numberOfTeachers == 5 && numberOfStudents == 29 {
        
 } else if numberOfTeachers == 5 && numberOfStudents == 30 {
        
 } else if numberOfTeachers == 6 && numberOfStudents == 27 {
        
 } else if numberOfTeachers == 6 && numberOfStudents == 28 {
        
 } else if numberOfTeachers == 6 && numberOfStudents == 29 {
        
 } else if numberOfTeachers == 6 && numberOfStudents == 30 {
       
 } else if numberOfTeachers == 7 && numberOfStudents == 27 {
        
 } else if numberOfTeachers == 7 && numberOfStudents == 28 {
        
 } else if numberOfTeachers == 7 && numberOfStudents == 29 {
        
 } else if numberOfTeachers == 7 && numberOfStudents == 30 {
        
 }

每个 if 条件中至少还有 4 个条件,例如 (4,27)、(4,28)、(5,27)、(5,28)....等等。 所以这整个条件变得太长了。

【问题讨论】:

  • 您可以使用嵌套的ifs 或switches,这可能不会减少行数,但会避免重复并使代码更易于阅读。
  • 你在警卫里面做什么?有时可以选择根本不使用ifswitch 语句,而是直接从输入值计算结果(在这种情况下为numberOfTeachersnumberOfStudents)。
  • 我喜欢@Felix 在这里的建议,也许更好的解决方案是计算教师与学生的比例,这将有助于减少逻辑序列中的行数?如果这在您的域中是不可能的并且您必须如此明确,那么实际上您必须尝试嵌套您的条件以减少重复。
  • 这些语句的主体内部会发生什么?这可能会揭示一种可以简化的方式
  • @Alexander 在这些语句的正文中,我根据上述条件为三个标签分配不同的文本。

标签: swift if-statement


【解决方案1】:

您可以嵌套if 条件,例如:

if numberOfTeachers == 4
{
    if numberOfStudents == 29 {}
    else if ...
}
else if ...

您还可以使用 switch 语句,这是长链 if-else 的绝佳替代方案:

switch numberOfTeachers
{
    case value 4:
        // handle number of students
    case value 5:
        ...
    default:
        // error?
}

编辑正如Martin R所说,也可以使用:

switch (numberOfTeachers, numberOfStudents)
{
    case (4, 27):
        // handle number of students
    case (5, 28):
        ...
    default:
        // error?
}

【讨论】:

  • 也可以开启一个元组:switch (numberOfTeachers, numberOfStudents) { case (4, 27): ...
  • 现在我使用嵌套的 if 条件,因为我发现与其他逻辑相比,它使代码更易于阅读。
  • 这很好,主要取决于个人喜好。我还能问你在箱子里做什么吗?取决于numberOf...s 要执行的任务是什么?
  • 在案例中,我根据上述条件为三个标签分配不同的文本。
  • 好的,所以除非您的 16 种可能的情况有 16 种不同的文本,否则可能会找到一些可以使用的模式。如果您愿意,可以告诉我在这种情况下要显示什么,以便我可以尝试弄清楚。再说一次,拥有复杂的 schama 可能会使代码更难阅读。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-23
  • 1970-01-01
  • 2020-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多