使用计算属性设置新值
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 函数。以上是关于使用计算属性设置新值的主要内容,如果未能解决你的问题,请参考以下文章