初始化一个计算变量
Posted
技术标签:
【中文标题】初始化一个计算变量【英文标题】:Init a computed variable 【发布时间】:2016-11-25 02:52:36 【问题描述】:我要创建一个新类,在这个类中有一个计算变量;所以我正在寻找一种方法来初始化这个变量:
import UIKit
class Squadra: NSCoder, NSCoding
var nomeSquadra: String
var numeroCoriSquadra: Int
var coloreSquadra: String
var immagineSquadra: String
var sottotitoloSquadra: String
get
return "I migliori cori: \(nomeSquadra)"
init(nome: String, numero: Int, colore: String, immagine: String, sottotitolo: String)
nomeSquadra = nome
coloreSquadra = colore
numeroCoriSquadra = numero
immagineSquadra = immagine
sottotitoloSquadra = sottotitolo
显然使用这行代码 Xcode 给了我一个编译错误(因为 var 是一个 get only 属性)。 我认为我必须使用 set 来使 var 可写,但我不知道如何操作,因为我不知道 get 和 set 是如何工作的。
【问题讨论】:
【参考方案1】:要么删除sottotitoloSquadra = sottotitolo
,要么分配给不同的变量。即使分配有效,您也永远不会真正将作为 sottotitolo
传入的值用于任何事情。
【讨论】:
【参考方案2】:当您使用独立属性 nomeSquadra
并尝试同时为 sottotitoloSquadra
设置设置器时,我看不到有用的行为。在您的情况下,对计算变量使用隐藏的支持属性可能会更好?
private var _sottotitoloSquadra: String
var sottotitoloSquadra: String
get
return "I migliori cori: \(_sottotitoloSquadra)"
set
_sottotitoloSquadra = newValue
init(nome: String, numero: Int, colore: String, immagine: String, sottotitolo: String)
//...
_sottotitoloSquadra = sottotitolo
【讨论】:
这很接近,但请记住 sotto 计算变量是只读的,因此最好删除 set 部分。初始化部分很好。【参考方案3】:如果我对你的分类理解正确,你想在 init() 没有提供值时使用变量的默认字符串(不过我只是在猜测)。
因此,如果团队没有特定的子标题,您可以根据团队的名称来编造一个。
我也了解您不希望在实例化对象后修改该属性。
如果是这种情况,(我假设您会得到一个空字符串来表示 sottotitolo),您可以定义一个私有变量来保存提供的标题并使用计算变量公开它。如果在 init() 中未提供标题,则该计算变量可以返回默认值(组成的标题)。
class Squadra
var nomeSquadra: String
var numeroCoriSquadra: Int
var coloreSquadra: String
var immagineSquadra: String
private var _sottotitoloSquadra = ""
var sottotitoloSquadra: String
return _sottotitoloSquadra == ""
? "I migliori cori: \(nomeSquadra)"
: _sottotitoloSquadra
init(nome: String, numero: Int, colore: String, immagine: String, sottotitolo: String)
nomeSquadra = nome
coloreSquadra = colore
numeroCoriSquadra = numero
immagineSquadra = immagine
_sottotitoloSquadra = sottotitolo
只有你的类,包括它的 init() 函数,才能修改保存提供的 sottotitolo 的私有变量。在该源文件之外,根本无法访问私有变量。
【讨论】:
以上是关于初始化一个计算变量的主要内容,如果未能解决你的问题,请参考以下文章