gpt4 book ai didi

Swift 可变数组参数

转载 作者:行者123 更新时间:2023-11-30 11:50:25 26 4
gpt4 key购买 nike

所以我基本上试图改变元组变量的参数,我的代码如下所示:

var tabsections: [(sectionTitle: String?, rows: [String])]
tabsections = [("2017", []),
("2018", [])]

var mutableMonths = ["2017-02", "2017-10", "2018-01"]

for section in tabsections {
for month in mutableMonths {
if section.sectionTitle == month.split(separator: "-").first?.string {
section.rows.append((month.split(separator: "-").last?.string)!) // "Cannot use mutating member on immutable value of type '[String]'"
mutableMonths.removeFirst()
}
}
}

但我不断收到错误

Cannot use mutating member on immutable value of type '[String]'

然后,在指定更多 section 变量并通过将其替换为 (sectionTitle, rows) 来声明循环后,错误将变为如下所示:

Cannot use mutating member on immutable value: 'rows' is a 'let' constant

我找到了关于可变性的答案,例如这个,但仅适用于函数(其中添加关键字 inout 可以修复它),但作为局部变量,我已经没有想法了。

我在这里错过了一些琐碎的事情吗?

任何帮助将不胜感激...

编辑:

我忘了提及,我知道基于 C 的基本循环可以做到这样的技巧

var i = 0
while i < tabsections.count {
for month in mutableMonths {
if tabsections[i].sectionTitle == month.split(separator: "-").first?.string {
tabsections[i].rows.append((month.split(separator: "-").last?.string)!)
mutableMonths.removeFirst()
}
}
i += 1
}

但我想知道在 Swift 4 中是否有更优雅/更快捷的方法来做到这一点,因为在 Swift 3 中添加 var 就可以了。

谢谢!

最佳答案

你是对的。它是可变的。但是当您迭代 tabsections 时,for 循环中的 section 无法更改。如果你写类似的东西(在for循环之前)

tabsections[0].rows.append("2017-02")

它会起作用的。

但是在 for 循环内尝试更改正在迭代的数组成员可能会导致问题。就像您正在开发一种编程语言一样思考。它有助于学习。如果有人迭代一个数组并从同一数组中删除一个元素。程序状态会怎样?这就像砍断你自己所坐的 Twig 。 :)

关于Swift 可变数组参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48374669/

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