我有一个方法迭代一个数组并调用其他方法与每个元素作为参数.如果我将此方法声明为:
func didFinishedListFiles(files: [FileModel]) {
for var fileData in files {
self.downloadSingleFile(NSUUID(UUIDString: fileData.uuid!)!);
}
}
Run Code Online (Sandbox Code Playgroud)
Xcode显示警告:
变量'fileData'从未发生变异; 考虑改为'让'不变
但如果我var改为let:
func didFinishedListFiles(files: [FileModel]) {
for let fileData in files {
self.downloadSingleFile(NSUUID(UUIDString: fileData.uuid!)!);
}
}
Run Code Online (Sandbox Code Playgroud)
Xcode显示错误:
'let'模式不能嵌套在已经不可变的上下文中
如何在没有任何警告/错误的情况下实施它的正确方法是什么?
本for- in模式隐含采用恒定结合(在其创建的范围也就是说,你的.fileData结合自动在本地let,因此不断为每一位通过循环.
所以以下内容:
for fileData in files { /*...*/ }
Run Code Online (Sandbox Code Playgroud)
......相当于:
var index = 0
while index < files.count {
let fileData = files[index]
//...
index += 1
}
Run Code Online (Sandbox Code Playgroud)
只有当你想改变那个绑定时,你才想添加var到for- inbinding中 - 也就是说,如果它是一个对象引用,你希望能够在单个循环中指向其他东西,或者一个值您希望能够更改的类型.但它看起来不像你正在做这两件事,所以var在这里使用这种绑定将是多余的.
(Swift 3摆脱了许多你可以使隐式不可变绑定for var变为可变的地方,但是作为一个例外 - 如果你想在循环中改变某些东西,它仍然是可能的.)
| 归档时间: |
|
| 查看次数: |
4489 次 |
| 最近记录: |