作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这段代码工作正常。它迭代我的数组 Int!
并打印其大小。
import Foundation
let x : Int! = 1
[x].forEach {i in
print(i.magnitude)
}
输出:
1
大概,
i
在循环体中是一个
Int
或
Int!
,事实上,如果我在
forEach
上向 Xcode 寻求“快速帮助”它报告:
func forEach(_ body: (Int) throws -> Void) rethrows
但是,如果在我的
forEach
中执行两个语句body,相反它无法编译,提示我需要解包
i
现在有可选类型
Int?
.
import Foundation
let x : Int! = 1
[x].forEach {i in
print(i.magnitude)
print(i.magnitude)
}
编译错误:
Value of optional type 'Int?' must be unwrapped to refer to member 'magnitude' of wrapped base type 'Int'
如果我现在要求“快速帮助”,我会得到:
func forEach(_ body: (Int?) throws -> Void) rethrows
我在循环体中放置的语句数量到底是如何影响循环变量的类型的?
最佳答案
基本上,您已经引出了边缘情况的边缘情况。你结合了两件魔鬼的工作:
[x].forEach {(i:Int) in
print(i.magnitude)
print(i.magnitude)
}
我们的
Int
type 是合法的,因为我们利用了单一的“摆脱 jail ”卡说隐式解包的 Optional 可以直接在需要解包类型本身的地方使用。并且通过显式说明类型,我们消除了编译器的疑虑。
Int?
而不是
Int
被传递到闭包中。)
关于swift - swift forEach 中奇怪的可选类型行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63861740/
我正在尝试用 Swift 编写这段 JavaScript 代码:k_combinations 到目前为止,我在 Swift 中有这个: import Foundation import Cocoa e
我是一名优秀的程序员,十分优秀!