【问题标题】:App Development with Swift - Lesson 13 - Exercise: "isBelow13"使用 Swift 开发应用程序 - 第 13 课 - 练习:“isBelow13”
【发布时间】:2023-03-28 01:17:01
【问题描述】:


我对 Swift 很陌生,我通过使用“使用 Swift 开发应用程序”-Book 来学习。
请检查下面的代码 - 它不起作用,我不知道为什么。

import UIKit

func isBelow13(number: Int) -> Bool {

let isBelow: Bool = false

    if number < 13 {
        let isBelow = true
    } else {
        let isBelow = false
    }
    return isBelow
}

isBelow13(number: 11) // returns false, should return true
isBelow13(number: 14) // returns false


干杯!

【问题讨论】:

  • 如果你无法弄清楚为什么你的代码不能按预期工作:把它放到一个编译项​​目而不是一个 Playground,然后使用 调试器。 设置断点、单步、检查变量。 学习发现错误。

标签: swift3 swift-playground


【解决方案1】:

您首先将 isBelow 定义为 false,然后在 if 语句中定义一个名为 isBelow 的新常量。这个新常量与上面的同名,但实际上完全不同。当您在 if 语句之外时,您在 if 语句中创建的语句不再存在,它只会返回您第一次创建的语句。您实际上并没有更改您最初设置的第一个 isBelow。

你真正想做的事情可以这样完成:

func isBelow13(number: Int) -> Bool {

    var isBelow: Bool = false

    if number < 13 {
        isBelow = true
    } else {
        isBelow = false
    }
    return isBelow
}

isBelow13(number: 11) // returns true
isBelow13(number: 14) // returns false

这样,您将创建一个可以重新分配“var”而不是“let”的变量,然后根据 if 语句条件更改该变量的值。然后,您将返回更改后的值。有意义吗?

上述相同代码的更简洁版本如下所示:(来自 cmets 中的@MartinR)

func isBelow13(number: Int) -> Bool {
    return number < 13
}

表达式 number &lt; 13 返回一个布尔值,因此您可以从函数中返回该表达式的结果。

【讨论】:

  • 您不必预先分配值,let isBelow: Bool 在这里就足够了。 – 或者只是return number &lt; 13
  • @MartinR 非常真实!做同一件事的方法有很多,我只是想让它尽可能接近原始代码,以免对 OP 造成混淆。
猜你喜欢
  • 1970-01-01
  • 2020-09-28
  • 2015-05-01
  • 2020-08-13
  • 1970-01-01
  • 1970-01-01
  • 2022-11-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多