gpt4 book ai didi

swift - 为什么 Swift 的这个通用集合实现不起作用?

转载 作者:行者123 更新时间:2023-11-28 10:02:45 24 4
gpt4 key购买 nike

我正在尝试实现一个简单的可变集作为学习 Swift 的一种方式,但下面的代码为我提供了以下针对 addremove 方法的编译器错误:

Could not find an overload for 'subscript' that accepts the supplied arguments

我做错了什么?

class SwiftSet<T: Hashable> {
let _underlyingSet: Dictionary<T, Bool>

init() {
_underlyingSet = Dictionary<T, Bool>()
}

subscript(k: T) -> Bool {
if _underlyingSet[k] {
return true
}
else {
return false
}
}

func contains(k: T) -> Bool {
return self[k]
}

func add(k: T) {
_underlyingSet[k] = true
}

func remove(k: T) {
_underlyingSet[k] = nil
}

func allObjects() -> T[] {
return Array(_underlyingSet.keys)
}
}

最佳答案

因为您正试图在 add()remove() 方法中修改用 let _underlyingSet 定义的不可变常量。

如果你想在初始化后修改一个变量,你应该把它改成var _underlyingSet,即:

class SwiftSet<T: Hashable> {
var _underlyingSet: Dictionary<T, Bool>

init() {
_underlyingSet = Dictionary<T, Bool>()
}

subscript(k: T) -> Bool {
if _underlyingSet[k] {
return true
}
else {
return false
}
}

func contains(k: T) -> Bool {
return self[k]
}

func add(k: T) {
_underlyingSet[k] = true
}

func remove(k: T) {
_underlyingSet[k] = nil
}

func allObjects() -> T[] {
return Array(_underlyingSet.keys)
}
}

关于swift - 为什么 Swift 的这个通用集合实现不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24071992/

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