Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 使用计算属性设置新值_Swift_Nsdictionary_Computed Properties - Fatal编程技术网

Swift 使用计算属性设置新值

Swift 使用计算属性设置新值,swift,nsdictionary,computed-properties,Swift,Nsdictionary,Computed Properties,我有一个模型对象,我想为该对象设置新值 下面我已经提到了对象变量和初始化 private var _data: NSMutableDictionary // MARK:- Init init(data: [String: AnyObject]) { _data = NSMutableDictionary(dictionary: data) } 如何使用setter设置新值。下面我已经提到了计算变量 var name: String? { get { if l

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

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

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

编辑

我能找到这个问题的答案


我需要更改_数据对象的名称。因此,我必须在不更改_数据中的其他变量的情况下更新名称。因此,我保留了_数据对象的可变副本,并在其中更改了新值。然后更新了_数据对象。

不确定您在这里要做什么,但您不能只写以下内容:

set {
    _data.objectForKey("network")?.objectForKey("name") = newValue
}
编辑:错误的函数,应该是:

set {
    _data.objectForKey("network")?.setObject(newValue, forKey: "name")
}
差不多

set {
    _data.objectForKey("network")?.setObject(newValue, forKey: "name")
}
这个怎么样:

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还处理
网络
键不存在的情况。如果
\u data
也可以是
nil
,那么还可以添加一个额外的
If let
来解决这种情况


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

我以前试过。它给出了一个错误“不能赋值:函数调用返回不可变值”,在这里我创建了一个模型对象。所以我想写set选项。根据这个理论,你的答案似乎是正确的。但我无法理解错误您告诉我们您想要实现什么,但您没有告诉我们您遇到了什么问题。它给出了错误“无法识别的选择器发送到实例0x7fd240dcf180”,那么字典中到底是什么?您需要在该对象上调用适当的setter函数。