C# 斯威夫特是否带着警戒状态返回?

C# 斯威夫特是否带着警戒状态返回?,c#,swift,guard,C#,Swift,Guard,我正在试着把一些Swift代码翻译成C。我阅读了文档,但无法理解此代码块的作用。我无法运行代码,所以这就更难了。请帮忙 do { oldArray.enumerated().forEach { oldTuple in guard case .entry = oldTuple.element else { return } // Do stuff } } 这返回值是否等同于中断 什么是防护条件?一些任务 斯

我正在试着把一些
Swift
代码翻译成
C
。我阅读了文档,但无法理解此代码块的作用。我无法运行代码,所以这就更难了。请帮忙

do {
    oldArray.enumerated().forEach { oldTuple in
        guard case .entry = oldTuple.element else {
            return
        }

        // Do stuff
    }
}
  • 返回值
    是否等同于
    中断
  • 什么是
    防护
    条件?一些任务

  • 斯威夫特操场是探索语言的好地方。即使不能运行整个代码,也可以在其周围放置一些支持片段,以查看发生了什么

    oldArray
    显然包含一些
    enum
    值。从您的代码片段中,我们可以看到其中一个值是
    .entry
    。为了便于探索,我创建了一个名为
    State
    enum
    ,并给出了一些示例(
    entry
    foo
    bar

    现在将代码片段放入函数中,并为其提供一个
    oldArray
    。在
    //Do stuff
    部分添加
    print
    ,真相将被揭示:

    enum State {
        case entry
        case foo
        case bar
    }
    
    func test() {
        let oldArray: [State] = [.entry, .entry, .bar, .entry, .foo]
    
        do {
            oldArray.enumerated().forEach { oldTuple in
                guard case .entry = oldTuple.element else {
                    return
                }
    
                // Do stuff
                print(oldTuple)
            }
        }
    }
    
    test()
    
    输出

    (offset: 0, element: __lldb_expr_1.State.entry)
    (offset: 1, element: __lldb_expr_1.State.entry)
    (offset: 3, element: __lldb_expr_1.State.entry)
    

    返回值
    是否等同于
    中断

    如果未满足
    保护
    条件,它将从关闭返回

    什么是
    防护
    条件?一些任务

    .enumerated
    oldArray
    转换为
    序列(偏移量:Int,元素:State)
    元组。因此示例数组变成
    [(偏移量:0,元素:.entry),(偏移量:1,元素:.entry),…]
    forEach
    依次获取每个元组并将其分配给
    oldTuple

    guard
    正在使用模式匹配来验证当前元组的
    元素
    值是否为
    。entry
    否则将退出闭包

    语法有点奇怪,但它的意思是,要继续超出此语句,当前元组的
    元素
    必须是
    条目
    ,否则
    从闭包返回
    ,并放弃处理此元素

    因此,这段代码循环遍历一个枚举数组,只处理
    .entry
    中的枚举

    做什么
    做什么


    从您的代码片段中看不到任何内容。如果您注释掉
    do{
    和相应的
    }
    测试仍然执行相同的操作
    do
    通常与错误处理一起使用,用于环绕可能引发错误的呼叫
    do
    语句通常与
    catch
    语句一起使用,然后这些语句捕获抛出的错误。本身,
    do{}
    只是创建了一个新的作用域。

    非常感谢!因此,
    guard
    中的
    return
    意味着循环将继续下一个元素?来自
    guard
    return
    意味着关闭的提前退出。
    forEach
    将对数组的每个元素执行闭包。提前退出只是意味着该语句已完成,因此它将跳过任何不是
    .entry
    的内容。这可以通过
    for
    循环完成,但在这种情况下,
    保护
    应该对oldArray.enumerated()中的oldTuple执行
    continue
    {guard case.entry=oldTuple.element else{continue}