gpt4 book ai didi

xcode - 在 Swift : var vs. 中迭代集合

转载 作者:行者123 更新时间:2023-12-04 11:35:55 25 4
gpt4 key购买 nike

我有一个迭代数组并以每个元素作为参数调用其他方法的方法。如果我将此方法声明为:

func didFinishedListFiles(files: [FileModel]) {
for var fileData in files {
self.downloadSingleFile(NSUUID(UUIDString: fileData.uuid!)!);
}
}

Xcode 显示警告:

Variable 'fileData' was never mutated; consider changing to 'let' constant



但如果我改变 varlet :
func didFinishedListFiles(files: [FileModel]) {
for let fileData in files {
self.downloadSingleFile(NSUUID(UUIDString: fileData.uuid!)!);
}
}

Xcode 显示错误:

'let' pattern cannot appear nested in an already immutable context



如何在没有任何警告/错误的情况下实现它的正确方法?

最佳答案

for - in模式隐式使用常量绑定(bind)(在它创建的范围内。也就是说,您的 fileData 绑定(bind)自动是本地的 let ,因此每次通过循环时都是常量。

所以以下内容:

for fileData in files { /*...*/ }

...相当于:
var index = 0
while index < files.count {
let fileData = files[index]
//...
index += 1
}

您想添加 varfor - in仅当您想要改变该绑定(bind)时才绑定(bind) - 也就是说,如果它是一个对象引用,您希望能够在单次循环期间指向其他东西,或者您希望能够更改的值类型.但看起来你并没有做这两件事,所以使用 var因为这种绑定(bind)在这里是多余的。

(Swift 3 去掉了许多可以使隐式不可变绑定(bind)可变的地方,但留下了 for var 作为一个异常(exception)——如果你想在循环期间更改某些内容,它仍然是可能的。)

关于xcode - 在 Swift : var vs. 中迭代集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33697364/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com