2016-07-21 12 views
0

私は新しいクラスを作成します。このクラスには計算された変数があります。私は、この変数を初期化する方法を探しています:(varが得る唯一の財産であるため)コードのXcodeのこの行で明らかに計算された変数を初期化する

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 
    } 
} 

は私のコンパイルエラーを与えます。 varを書き込み可能にするためにセットを使用しなければならないと思いますが、どうやって動作させるのか分かりません。

答えて

0

sottotitoloSquadra = sottotitoloを削除するか、別の変数に割り当てます。割り当てがうまくいっても、実際にはsottotitoloという値は何にも使われません。

0

あなたは独立したプロパティ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 
} 
+0

これは近いですが、計算された変数が読み込み専用であることを覚えておいてください。 init部分は良いです。 –

0

私が正しくあなたクラスを理解していれば、あなたがするときは、init()変数のデフォルトの文字列を使用するには、(私はちょうどかかわらず、推測している)の値を提供しませんでした。

チームに特定のサブタイトルがない場合は、そのチームの名前から1つを作成します。

また、オブジェクトのインスタンス化後にそのプロパティを変更可能にしたくないことも理解しています。

この場合、私は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を保持するプライベート変数を変更できます。そのソースファイルの外では、プライベート変数には全くアクセスできません。

関連する問題