1

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

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 是一个只能获取的属性)。我认为我必须使用 set 来使 var 可写,但我不知道如何操作,因为我不知道 get 和 set 是如何工作的。

4

3 回答 3

0

如果我理解你的分类正确,你想在 init() 没有提供值时使用变量的默认字符串(我只是在猜测)。

因此,如果团队没有特定的 subTitle,您将根据团队的名称制作一个。

我也了解您不希望在实例化对象后修改该属性。

如果是这种情况,(我假设您会得到一个空字符串作为 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 的私有变量。在该源文件之外,根本无法访问私有变量。

于 2016-07-22T04:40:16.770 回答
0

删除sottotitoloSquadra = sottotitolo或分配给不同的变量。即使分配有效,您也永远不会真正使用传入的值作为sottotitolo任何东西。

于 2016-07-21T13:30:18.043 回答
0

nomeSquadra当您使用独立属性并尝试同时使用 setter时,我看不到有用的行为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
}
于 2016-07-21T13:30:25.357 回答