我正在尝试将一些Swift
代码转换为C#
。我阅读了文档,但无法掌握此代码块的功能。我无法运行代码,因此使其变得更加困难。请帮忙!
do {
oldArray.enumerated().forEach { oldTuple in
guard case .entry = oldTuple.element else {
return
}
// Do stuff
}
}
return
等同于break
吗?guard
条件是什么?一些任务...?答案 0 :(得分:1)
快速游乐场是探索该语言的好地方。即使您无法运行整个代码,也可以在代码周围放一些支持件,以查看发生了什么。
oldArray
显然拥有一些enum
值。从您的代码段中,我们可以看到其中一个值是.entry
。我出于探索目的创建了一个名为enum
的{{1}},并给出了几种情况(State
,entry
,foo
)。
现在将您的代码片段放入一个函数中,并为其提供一个bar
即可使用。在oldArray
部分中添加print
,事实将被揭示:
// Do stuff
输出
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)
等同于return
吗?
如果不满足break
条件,它将从闭包中返回。
guard
条件是什么?一些任务...?
guard
将.enumerated
变成oldArray
元组的序列。因此,示例数组变为(offset: Int, element: State)
。 [(offset: 0, element: .entry), (offset: 1, element: .entry), ...]
依次获取每个元组,并将其分配给forEach
。
oldTuple
使用模式匹配来验证当前元组的guard
值为element
,否则退出闭包。
语法有点奇怪,但是要说,要继续执行该语句,当前元组的.entry
必须为element
,否则为.entry
放弃处理此元素。
因此,此代码循环遍历枚举数组,并且仅处理return
枚举。
.entry
的作用是什么?
我们无法从您的摘要中看到任何内容。如果您注释掉do
和相应的do {
,则测试仍会执行相同的操作。 }
通常与错误处理一起使用,以包围可能do
错误的呼叫。 throw
语句通常与do
语句一起使用,然后捕获抛出的错误。 catch
本身仅创建一个新范围。