使用计算属性设置新值

时间:2016-01-10 18:14:51

标签: swift nsdictionary computed-properties

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

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

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对象。

3 个答案:

答案 0 :(得分:0)

这样的东西
set {
    _data.objectForKey("network")?.setObject(newValue, forKey: "name")
}

答案 1 :(得分: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来解决这种情况。

BTW,我还添加了一个较短版本的getter。

答案 2 :(得分:-1)

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

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

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

set {
    _data.objectForKey("network")?.setObject(newValue, forKey: "name")
}
相关问题