gpt4 book ai didi

swift - 对于 in 给出 let 而不是 var

转载 作者:可可西里 更新时间:2023-11-01 00:51:50 25 4
gpt4 key购买 nike

我正在为 Swift 中的 for-in-loop 而苦苦挣扎。我有两个 for 循环,我希望它们是等效的,但第一个给出错误,第二个按我的预期工作。有人可以向我解释为什么它的工作方式不同吗?

protocol Slide {
var title: String { get set }
}

class BasicSlide: NSObject, Slide {
var title: String = "Title"
}

var slides: [Slide]?
slides = [BasicSlide()]

for slide in slides! {
slide.title = "New title" // Cannot assign to property: 'slide' is a 'let' constant
}

for var i in 0 ..< slides!.count {
slides![i].title = "New title"
}

最佳答案

正如您所说的那样,slide 是此表达式中的常量:

for slide in slides! {
slide.title = "New title" // Cannot assign to property: 'slide' is a 'let' constant
}

如果您需要改变您的slide,只需使用一个var 引用即可:

for slide in slides! {
var slide = slide
slide.title = "New title" // fine
}

(不要使用 for var 语法,因为它很快就会从语言中废除。)

但是,在您的示例中有一个更好的方法:像这样声明您的协议(protocol):

protocol Slide : class {
var title: String { get set }
}

现在这个代码是合法的!

for slide in slides! {
slide.title = "New title"
}

为什么?因为您现在已经保证 Slide 的采用者是一个类,而一个类是一个引用类型并且可以就地改变。之前失败的唯一原因是 Swift 担心采用者可能是一个结构。

关于swift - 对于 in 给出 let 而不是 var,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35087984/

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