元组属性的自定义设置器(Swift)
Posted
技术标签:
【中文标题】元组属性的自定义设置器(Swift)【英文标题】:Custom setter for tuple property (Swift) 【发布时间】:2014-09-18 15:44:42 【问题描述】:我的类中有一个计算属性,它是一个可选元组:
var contents: (Int, Bool)?
我想编写一个自定义设置器,但不知道如何单独引用元组组件。有谁知道?我尝试了以下方法,但它不起作用:
var contents: (Int colorNumber, Bool selected)?
// getter & setter here...
【问题讨论】:
【参考方案1】:使用 let 分解元组
var iVal:Int?
var bVal:Bool?
var contents:(Int, Bool)?
get
if iVal != nil && bVal != nil
return (iVal!, bVal!)
else
return nil
set
if newValue != nil
let (i, b) = newValue! // decompose the tuple
iVal = i
bVal = b
else
iVal = nil
bVal = nil
【讨论】:
【参考方案2】:您必须明确实现set
和get
。在 setter 中,您可以使用 newValue
隐式参数访问新值。
假设您的元组由单个数据成员支持,那么您将按如下方式实现该属性:
var colorNumber: Int?
var selected: Bool?
var contents: (Int, Bool)?
get
if self.colorNumber != nil && self.selected != nil
return (self.colorNumber!, self.selected!)
return nil
set
if let value = newValue
colorNumber = value.0
selected = value.1
你也可以使用命名参数:
var colorNumber: Int?
var selected: Bool?
var contents: (colorNumber: Int, selected: Bool)?
get
if self.colorNumber != nil && self.selected != nil
return (self.colorNumber!, self.selected!)
return nil
set
if let value = newValue
colorNumber = value.colorNumber
selected = value.selected
【讨论】:
似乎这些被称为“未命名元组”和“命名元组”(如此处所示:raywenderlich.com/75289/…)但苹果只是称它们为......嗯,一点也不。无论如何,这很棒,分解答案(上图)也很棒。以上是关于元组属性的自定义设置器(Swift)的主要内容,如果未能解决你的问题,请参考以下文章
Delphi 自定义组件,拖动时无法在设计器中定位(顶部/左侧属性的自定义设置器)