Swift do-return with guard condition?
Swift do-return with guard condition?
我正在尝试将一些 Swift
代码翻译成 C#
。我阅读了文档,但无法理解此代码块的作用。我无法 运行 代码,这使它变得更加困难。请帮忙!
do {
oldArray.enumerated().forEach { oldTuple in
guard case .entry = oldTuple.element else {
return
}
// Do stuff
}
}
- 这个
return
等同于 break
吗?
guard
条件是什么?一些作业...?
Swift 操场是探索语言的好地方。即使您无法 运行 整个代码,您也可以在其周围放置一些支持片段以查看发生了什么。
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)
Is this return
equivalent to a break
?
如果 guard
条件不满足,它 returns 从关闭。
What is the guard
condition? Some assignment...?
.enumerated
将 oldArray
转换为 (offset: Int, element: State)
元组序列。所以示例数组变为 [(offset: 0, element: .entry), (offset: 1, element: .entry), ...]
。 forEach
依次获取每个元组并将其分配给 oldTuple
.
guard
正在使用模式匹配来验证当前元组的element
值为.entry
,否则它会退出闭包。
语法有点奇怪,但它是说,要继续超出此语句,当前元组的 element
必须是 .entry
否则 return
从闭包中放弃处理这个元素.
因此,此代码循环遍历枚举数组并仅处理 .entry
.
的枚举
What does the do
do?
我们无法从您的代码段中看到任何内容。如果你注释掉 do {
和相应的 }
测试仍然做同样的事情。 do
通常与 错误处理 一起使用,以包围可能 throw
错误的调用。 do
语句通常与 catch
语句一起使用,然后捕获抛出的错误。就其本身而言,do { }
只是创建了一个新范围。
我正在尝试将一些 Swift
代码翻译成 C#
。我阅读了文档,但无法理解此代码块的作用。我无法 运行 代码,这使它变得更加困难。请帮忙!
do {
oldArray.enumerated().forEach { oldTuple in
guard case .entry = oldTuple.element else {
return
}
// Do stuff
}
}
- 这个
return
等同于break
吗? guard
条件是什么?一些作业...?
Swift 操场是探索语言的好地方。即使您无法 运行 整个代码,您也可以在其周围放置一些支持片段以查看发生了什么。
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)
Is this
return
equivalent to abreak
?
如果 guard
条件不满足,它 returns 从关闭。
What is the
guard
condition? Some assignment...?
.enumerated
将 oldArray
转换为 (offset: Int, element: State)
元组序列。所以示例数组变为 [(offset: 0, element: .entry), (offset: 1, element: .entry), ...]
。 forEach
依次获取每个元组并将其分配给 oldTuple
.
guard
正在使用模式匹配来验证当前元组的element
值为.entry
,否则它会退出闭包。
语法有点奇怪,但它是说,要继续超出此语句,当前元组的 element
必须是 .entry
否则 return
从闭包中放弃处理这个元素.
因此,此代码循环遍历枚举数组并仅处理 .entry
.
What does the
do
do?
我们无法从您的代码段中看到任何内容。如果你注释掉 do {
和相应的 }
测试仍然做同样的事情。 do
通常与 错误处理 一起使用,以包围可能 throw
错误的调用。 do
语句通常与 catch
语句一起使用,然后捕获抛出的错误。就其本身而言,do { }
只是创建了一个新范围。