gpt4 book ai didi

swift - 如何将可选变量与可变集合一起使用?

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

当集合被分配给可选变量时,我似乎无法使集合变得可变。在下面的示例代码中,NonOptional 按预期工作。 var 将保持集合的可变状态。没有本地变量,我可以直接使用变量字段。但是我不确定如何让变量具有不可变集合,我是否应该假设“let”而不是“var”可以解决问题?

尽管如此,看看Optional类,需要一个本地var来为集合提供可变状态(即使XCode建议在我不使用本地var时使用append())。这真的是我应该编写代码通过添加局部变量来更新集合的方式吗?有没有更简洁的方法而不使用本地变量?我很想知道集合的分配是否是一个简单的别名,或者它是否执行浅层或深层的复制?

   class NonOptional {
var exclamation: String[] // using var should set that collection as mutable...

init() {
self.exclamation = []
}

func write() {
self.exclamation.append("exclamation")
}

func delete() {
if self.exclamation.count > 0 {
self.exclamation.removeAtIndex(0)
}
}
}

class Optional {
var question: String[]? // using var should set that collection as mutable...

init() {
self.question = []
}

func write() {
var local = self.question! // copy or pass by ref?
local.append("question") // why can't I just do self.foo!.append("foo") ?
}

func delete() {
if self.question!.count > 0 {
var local = self.question!
local.removeAtIndex(0)
}
}
}

最佳答案

这个问题是在 Swift 1 仍处于测试阶段时提出的,此后发生了很多变化(尽管我不完全确定 Swift 1 中是否不存在此特定功能)。

对于后代来说,在 Swift 3 中改变可选数组是没有问题的。以下是您的操作方法:

var strings: [String]? = ["a", "b"]
strings?[0] = "A"
// strings is now Optional(["A", "b"])
strings?.append("c")
// strings is now Optional(["A", "b", "c"])
strings?.remove(at: 1)
// strings is now Optional(["A", "c"])

关于swift - 如何将可选变量与可变集合一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24349762/

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