create Dictionary class



我正在编写一个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

更改

print(myDictionary["key1"])

print(myDictionary.dictionary["key1"])

我假设你想创建一个自定义字典,因为你想检查(也许将来(作为密钥对添加的值是否可以接受。

无论如何,如果你想有一个自定义的字典类作为系统字典类的包装器,我建议将字典property设置为私有的(这样外部人员就不能直接访问和修改它(,并添加一个获取密钥值的额外方法(如果存在这样的密钥(:

class MyDictionary {
private var dictionary = ["":""]
init() {
}
func addPair(key: String, value: String) {
dictionary.updateValue(value, forKey: key)
}
func valueForKey(_ key: String) -> String? {
if let valueForKey = dictionary[key] {
return valueForKey
}
return nil
}
}

这就是你将如何使用它:

let myDictionary = MyDictionary()
myDictionary.addPair(key: "key1", value: "value1")
if let valueForKey = myDictionary.valueForKey("key1") {
print(valueForKey)
}

如果你真的想以你提到的不起作用的方式获得值,你需要实现一个subscript,因为MyDictionary是一个自定义类,还没有:

class MyDictionary {
private var dictionary = ["":""]
/* more code */
func valueForKey(_ key: String) -> String? {
if let valueForKey = dictionary[key] {
return valueForKey
}
return nil
}
subscript(_ key: String) -> String? {
get {
return valueForKey(key)
}
}
}

这就是你将如何使用下标:

let myDictionary = MyDictionary()
myDictionary.addPair(key: "key1", value: "value1")
if let valueForKey = myDictionary["key1"] {
print(valueForKey)
print(myDictionary["key1"]!)
}

请注意,myDictionary["key1"]返回一个Optional StringString?,因此您必须强制打开该值才能使print()方法不抱怨。由于我们在if let语句中执行此操作,所以我们知道myDictionary["key1"]不是nil,并且myDictionary["key1"]!必须是某个有效的String对象。

点击此处查看更多信息:https://docs.swift.org/swift-book/LanguageGuide/Subscripts.html

为了能够使用您的语法,添加密钥订阅支持(getter和setter(。

class MyDictionary {
var dictionary = ["":""]
init() {
}
func addPair(key: String, value: String) {
dictionary.updateValue(value, forKey: key)
}
subscript(_ key: String) -> String? {
get { return dictionary[key] }
set { dictionary[key] = newValue }
}
}
let myDictionary = MyDictionary()
myDictionary.addPair(key: "key1", value: "value1")
print(myDictionary["key1"]!)

您可以将类扩展为泛型,以便将其用于不同的类型。订阅设置器甚至使addPair变得多余。

class MyDictionary<K : Hashable, V> {
var dictionary = [K:V]()
subscript(_ key: K) -> V? {
get { return dictionary[key] }
set { dictionary[key] = newValue }
}
}
let myDictionary = MyDictionary<String,String>()
myDictionary["key1"] = "value1"   
print(myDictionary["key1"]!)

最新更新