-2

我有一个模型对象,我想为该对象设置新值。

下面我提到了对象变量和初始化

private var _data: NSMutableDictionary

// MARK:- Init
init(data: [String: AnyObject])
{
    _data = NSMutableDictionary(dictionary: data)
}

如何使用 setter 设置新值。下面我提到了计算变量

var name: String? {

    get {
        if let nameObject = _data.objectForKey("network")?.objectForKey("name") {
            return (nameObject as! String)
        } else {
            return nil
        }
    }

    set {

    }
}

需要完成setter

编辑

我可以找到这个问题的答案。

我需要更改 _data 对象的名称。所以我必须更新名称而不更改 _data 中的其他变量。所以我保留了 _data 对象的可变副本并在那里更改了新值。然后更新了 _data 对象。

4

3 回答 3

0

这个怎么样:

var name: String? {

    get {
        return _data["network"]?["name"] as? String
    }

    set {
        if let network = _data["network"] as? Dictionary {
            network["name"] = newValue
        } else {
            let network: [String:AnyObject] = ["name": newValue]
            data["network"] = network
        }
    }
}

setter 还负责处理network密钥不存在的情况。如果也_data可以,nil那么也可以添加一个额外的if-let来解决这种情况。

顺便说一句,我还添加了一个较短版本的 getter。

于 2016-01-10T18:33:30.980 回答
0

就像是

set {
    _data.objectForKey("network")?.setObject(newValue, forKey: "name")
}
于 2016-01-10T18:26:56.870 回答
-1

不太确定你想在这里做什么,但你不能写这个:

set {
    _data.objectForKey("network")?.objectForKey("name") = newValue
}

编辑:错误的功能,应该是:

set {
    _data.objectForKey("network")?.setObject(newValue, forKey: "name")
}
于 2016-01-10T18:20:59.510 回答