gpt4 book ai didi

swift - 用范围运算符替换 C 循环 - 段错误 : 11 When used w/? 链接

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

编辑:发生这种情况是因为我通过带有可选链接的属性和/或方法访问 SomeArrayWrapper 实例。我已经更新了我的例子。

今天早上我在将项目更新到 Swift 2.2 时遇到了问题。

这是我所拥有的示例:

//wraps an array
class SomeArrayWrapper<T> {

var privateArray = [T]()

// returns count from private array
var count: Int { get {

return self.privateArray.count
}
}
}

class SomeClass {

var list: SomeArrayWrapper<Int>?
}

let someInstance = SomeClass()

// Somewhere else I need to use this like this:
let myArrayType = SomeArrayWrapper<Int>()

for var i = 0; i < someInstance.list?.count; i++ {

// Do things.
}

// Replacing the C style loop with:
for i in 0..<someInstance.list?.count {


}
// Reults in a segmentation fault 11 at compile time.

我正在经历这个变化,因为 C 循环会导致警告。我没有使我的自定义结构符合 Sequence 或 Collections(我不确定这是否与它有任何关系)。

这是 Swift 2.2 的错误还是我做错了?

最佳答案

虽然强制解包 Optional 的解决方案确实“有效”(在防止段错误的意义上),但在大多数情况下,花时间和麻烦解包 Optional < 不是更好吗? em>安全?像这样:

if let count = someInstance.list?.count {
for i in 0..<count {
// ...
}
}

正如 Sulthan 所指出的,您可以通过使用导致循环不发生的默认值来更巧妙地表达这一点:

for i in 0..<(someInstance.list?.count ?? 0) {
// ...
}

关于swift - 用范围运算符替换 C 循环 - 段错误 : 11 When used w/? 链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36157126/

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