gpt4 book ai didi

swift - 错误 : Cannot subscript a value of type 'X' with . ..'

转载 作者:可可西里 更新时间:2023-11-01 01:58:53 24 4
gpt4 key购买 nike

错误:无法使用类型为“(safe: Int)”的索引为类型为“[CustomClass]”的值下标

class CustomClass {
let value: String
init(value: String) {
self.value = value
}
}

extension Collection {

subscript(safe: Int) -> Element? {
if safe > count-1 {
return nil
}
return self[safe]
}
}

let steps: [CustomClass] = []

if let step = steps[safe: 4] { // error here
}

为什么会这样?

最佳答案

请注意,除了@Hamish 的评论中已经提到的下标参数问题之外,您的代码中还有一些其他问题:ArraySlice 也符合 RandomAccessCollection 所以只需检查数组计数不保证它是一个安全的索引。您应该添加一个 guard 语句来检查 indices 属性是否包含 Index。您还应该将下标参数更改为 Index 而不是 Int:

class CustomClass {
let value: Int
init(value: Int) {
self.value = value
}
}

extension Collection {
subscript(safe index: Index) -> Element? {
guard indices.contains(index) else {
return nil
}
return self[index]
// or simply
// return indices.contains(index) ? self[index] : nil
}
}

Playground 测试:

let steps = [CustomClass(value: 0),CustomClass(value: 1),CustomClass(value: 2),CustomClass(value: 3),CustomClass(value: 4),CustomClass(value: 5),CustomClass(value: 6)]

if let step6 = steps[safe: 6] {
print(step6.value) // 6
}

let stepsSlice = steps[0...4]
let step6 = stepsSlice[safe: 6]
print(step6?.value) // nil

关于swift - 错误 : Cannot subscript a value of type 'X' with . ..',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48244996/

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