使用计算属性设置新值

Posted

技术标签:

【中文标题】使用计算属性设置新值【英文标题】:Set new value with computed properties 【发布时间】:2016-04-15 00:36:39 【问题描述】:

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

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

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

【问题讨论】:

你告诉我们你想要达到什么目标,但你没有告诉我们你遇到了什么问题。 【参考方案1】:

这个怎么样:

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。

【讨论】:

【参考方案2】:

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

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

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

set 
    _data.objectForKey("network")?.setObject(newValue, forKey: "name")

【讨论】:

我以前试过。它给出了一个错误“无法赋值:函数调用返回不可变值” 这里我正在创建一个模型对象。所以我想写设置选项。根据理论,您的答案似乎是正确的。但我无法理解错误【参考方案3】:

类似

set 
    _data.objectForKey("network")?.setObject(newValue, forKey: "name")

【讨论】:

它给出了错误“无法识别的选择器发送到实例 0x7fd240dcf180” 那么字典里到底是什么?您需要在该对象上调用适当的 setter 函数。

以上是关于使用计算属性设置新值的主要内容,如果未能解决你的问题,请参考以下文章

Vue 中 computed 修改使用的属性

Vue中computed和watch的区别

Vue中computed和watch的区别

计算机图形学_图元的属性_1_OpenGL状态变量

vue3中的 computed

何时在计算属性设置器上使用方法,反之亦然?