我要创建一个新类,在这个类中有一个计算变量;所以我正在寻找一种方法来初始化这个变量:
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 get属性)。
我认为我必须使用一个集来使var可写,但我不知道如何操作,因为我不确切知道如何获取和设置工作。
答案 0 :(得分:0)
删除sottotitoloSquadra = sottotitolo
或指定其他变量。即使作业有效,你也从未真正使用sottotitolo
作为任何内容的值。
答案 1 :(得分:0)
当您使用独立属性nomeSquadra
并尝试同时为sottotitoloSquadra
设置setter时,我看不到有用的行为。也许最好在你的情况下使用隐藏的支持属性来计算变量?
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
}
答案 2 :(得分:0)
如果我理解你的类正确,你想在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的私有变量。在该源文件之外,根本无法访问私有变量。