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}