我正在编写一个Swift类,它在实例化时构建一个字典,加上可以添加键值对,但一旦完成问题就是我无法访问我添加的各个对,所以在某处我一定有问题没检测,请帮忙
class MyDictionary {
var dictionary = ["":""]
init() {
}
func addPair(key: String, value: String) {
//dictionary["key"] = "value"
dictionary.updateValue(value, forKey: key)
}
}
// just to compare... this one works
var dict = ["one": "abc"]
dict["two"] = "efg"
print(dict["two"]!)
let myDictionary = MyDictionary()
myDictionary.addPair(key: "key1", value: "value1")
print(myDictionary)
//print(myDictionary["key1"]) //Does not work
3 回答
更改
至
我假设你想要创建一个自定义字典,因为你想检查(可能在将来)是否可以接受作为密钥对添加的值是否可接受 .
无论如何,如果你想让一个自定义字典类充当系统Dictionary类的包装器,我建议让字典
property
私有(所以没有外人可以直接访问和修改它),并添加一个额外的方法获取密钥的值(如果存在这样的密钥):这是你将如何使用它:
如果你真的想以你提到的方式获得它的 Value 's not working, you' ll需要实现
subscript
,因为MyDictionary是一个自定义类,但还没有:这是你如何使用下标:
请注意
myDictionary["key1"]
返回Optional String
或String?
,因此您必须强制解包该值才能使print()
方法不要抱怨 . 由于我们在if let
语句中执行 - 我们知道myDictionary["key1"]
不是nil,myDictionary["key1"]!
必须是一些有效的String对象 .在这里查看更多:https://docs.swift.org/swift-book/LanguageGuide/Subscripts.html
为了能够使用您的语法添加密钥订阅支持(getter和setter) .
您可以将类扩展为泛型,以便将其用于不同类型 . 订阅设置器使
addPair
甚至是多余的 .