Swift 字典属性的Setter-或:从字典中获取最后添加的项

Swift 字典属性的Setter-或:从字典中获取最后添加的项,swift,dictionary,Swift,Dictionary,我有一个具有不同计算属性的自定义类。其中之一是[String:String]的字典。getter是没有问题的,但是我不知道如何使用setter:我怎样才能弄清楚,最后添加到字典中的值是什么?显然,newValue.last不存在(.first有!) 编辑: 这似乎有效: var myProp: [String: String] { get { ... } set { let lastVal = newValue[newValue.startIndex.advanc

我有一个具有不同计算属性的自定义类。其中之一是
[String:String]
字典。getter是没有问题的,但是我不知道如何使用setter:我怎样才能弄清楚,最后添加到字典中的值是什么?显然,
newValue.last
不存在(.first有!)

编辑:

这似乎有效:

var myProp: [String: String] {
    get { ... }
    set {
        let lastVal = newValue[newValue.startIndex.advancedBy(newValue.count-1)]
        ...
    }
但是:这是否总是返回最后一个附加值

编辑2


第一次编辑是错误的。字典是无序的,这样就不确定它是否真的返回最后添加的键和值。请参阅下面的答案。

正如您所指出的,字典是键-值对的无序集合,因此没有
最后一个
getter(
第一个
只是为了方便起见,在Objective-C中更恰当地称之为
任何对象
)。字典也不记录添加的订单项

要获得最后一项,有两种可能。您可以重构以使用数组,例如元组
(键、值)
;或者,您可以跟踪添加到单独变量中的最后一项

但可能对“二传手”有误解。setter设置整个对象

set { myProp = newValue }
因此,如果您有一个
myProp=[“foo”:“bar”]
,myProp中的整个字典都会被这些数据覆盖

您需要的是向属性添加一个键。在Swift中,这是通过订阅完成的

myProp["foo"] = "bar"
您不必在
get
闭包中实现任何特殊功能


但是请注意,您必须记住两件事:首先,字典必须正确初始化;其次,如果新值使用相同的
,则任何现有项都将被覆盖

我现在明白了。。。这本字典杂乱无章。要真正获得最后一个附加值,我必须将值本身与新值进行比较。工作守则:

var myProp: [String: String] {
    get { // doing things to read the things and add them to a dictionary }
    set {
        var new = newValue
        for (key, value) in myProp {
            if new[key] == value {
                new.removeValueForKey(key)
            }
        }
        // now 'new' should only have one key and one value, that one, that just was added
    }
}

字典是键/值对的无序集合。
首先返回的一对
不一定是首先添加到词典的那一对。啊,你比我的编辑速度快;)谢谢这意味着我的假设是正确的,即顺序可以不同于加法的顺序?是的,你不应该对字典中键/值对的顺序进行任何假设。我使用getter和setter是有原因的,谢谢,但没有误解。我正在使用libxml,在getter部分我正在读取节点的属性,在setter部分我想设置它们。。。但只有一个改变了。我有解决办法,答案如下……这在你的问题中并不清楚。你可以反复浏览这些项目,并检查哪一个是新的。是的,可能不完全清楚,但正如你所说:否则我的问题就没有任何意义;)我的解决方案确实知道如何进行迭代。