初始化计算变量

时间:2016-07-21 13:22:52

标签: swift properties var computed-properties

我要创建一个新类,在这个类中有一个计算变量;所以我正在寻找一种方法来初始化这个变量:

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可写,但我不知道如何操作,因为我不确切知道如何获取和设置工作。

3 个答案:

答案 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的私有变量。在该源文件之外,根本无法访问私有变量。