Swift和SwiftUI条件判断语句guard
Swift和SwiftUI条件判断语句guard

Swift和SwiftUI条件判断语句guard

在 Swift 和 SwiftUI 中,guard 是一种控制流语句,用于提前退出当前代码块(如函数、方法或循环),以确保某些条件成立。如果条件不满足,guard 会执行一个退出操作(如 return、break 或 continue)。这是 Swift 的一种安全编程模式,通常用于简化代码的逻辑层次。

guard 的基本语法

guard 条件 else {
    // 条件不满足时执行的代码
    退出当前代码块
}

条件: guard 需要一个返回 Bool 的表达式。

退出操作: 必须使用 return、break、continue 或 fatalError() 等语句退出当前代码块。

典型使用场景

1、提前校验条件

使用 guard 提前检查输入参数、数据状态等,避免深层嵌套。

func divide(a: Double?, b: Double?) -> Double? {
    guard let a = a, let b = b, b != 0 else {
        print("Invalid input: a or b is nil, or b is zero.")
        return nil
    }
    return a / b
}

2、校验绑定值

使用 guard 和可选绑定检查非空值。

func printName(name: String?) {
    guard let name = name else {
        print("Name is nil.")
        return
    }
    print("Hello, \(name)!")
}

3、循环中提前退出

for number in [1, 2, nil, 4, nil] {
    guard let number = number else {
        print("Encountered a nil value, skipping.")
        continue
    }
    print("Number is \(number)")
}

4、限制用户输入:

func updateTargetAmount(input: String?) {
    guard let input = input, let amount = Double(input), amount > 0 else {
        print("Invalid input.")
        return
    }
    print("Valid amount: \(amount)")
}

guard 与 if 的对比

示例对比

guard 实现

func validate(input: Int?) {
    guard let input = input, input > 0 else {
        print("Invalid input.")
        return
    }
    print("Valid input: \(input)")
}

if实现:

func validate(input: Int?) {
    if let input = input, input > 0 {
        print("Valid input: \(input)")
    } else {
        print("Invalid input.")
    }
}

在 SwiftUI 中使用 guard

在 SwiftUI 中,guard 可以用来确保状态或数据满足条件,否则提前返回,比如在视图的逻辑处理或数据加载中。

使用示例

1、校验用户输入

Button("Submit") {
    guard !textInput.isEmpty else {
        showAlert = true
        return
    }
    print("Submitted: \(textInput)")
}

2、可选数据绑定

struct ContentView: View {
    @State private var number: Int? = 10

    var body: some View {
        VStack {
            if let number = number {
                Text("Number is \(number)")
            } else {
                Text("Number is nil")
            }

            Button("Clear Number") {
                number = nil
            }

            Button("Update Number") {
                guard let newNumber = Int.random(in: 1...100) as Int? else {
                    print("Invalid number.")
                    return
                }
                number = newNumber
            }
        }
    }
}

总结

guard 是 Swift 中的一种关键控制流语句,常用于提前校验条件。

在 SwiftUI 中,guard 可以帮助处理用户输入、状态检查等逻辑,提升代码可读性和安全性。

选择使用 guard 或 if 取决于具体需求,但在需要提前退出时,guard 是更优雅的选择。

如果您认为这篇文章给您带来了帮助,您可以在此通过支付宝或者微信打赏网站开放者。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注