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 は取得専用プロパティであるため)。var を書き込み可能にするために set を使用する必要があると思いますが、get と set がどのように機能するか正確にはわからないため、操作方法がわかりません。

4

3 に答える 3

0

削除するsottotitoloSquadra = sottotitoloか、別の変数に割り当ててください。割り当てが機能したとしても、実際に入ってくる値をsottotitolo何としても使用することはありません。

于 2016-07-21T13:30:18.043 に答える
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
}
于 2016-07-21T13:30:25.357 に答える
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 を保持するプライベート変数を変更できます。そのソース ファイルの外では、private 変数にはまったくアクセスできません。

于 2016-07-22T04:40:16.770 に答える