2017-01-07 7 views
0

私は迅速なIosプログラミングの新機能です。私はクラス内でゲッターとセッターでプライベートVARを作成する必要があるのか​​どうか不思議です。そして、私はこれら2プライベート(var)を追加しないとどうなりますか?このPersonクラスにprivate varを2つ追加する必要があるのはなぜですか?

class Person { 
    private var _firstname: String! 
    private var _lastname: String! 

    var firstname: String { 
     return _firstname 
    } 

    var lastname: String { 
     return _lastname 
    } 

    var fullname: String { 
     return "\(firstname) \(lastname)" 
    } 
} 

答えて

1

をあなたが示されているコードは、計算された変数を介して実装読み取り専用のプロパティを提供するために、民間バッキング変数を使用しています。セッターとゲッターはありません。

図示されていないイニシャライザには、_firstname_lastnameが設定されていると考えられます。プライベート変数が設定されると、パブリックメソッドによって変更することはできません。

Personインスタンスの名前が変更されたことがうれしかった場合は、バッキング変数と計算されたプロパティの代わりに単純なパブリックString変数を使用できます。

1
  1. これは3.0迅速ではありません。これは迅速です2.3。
  2. あなたはそうする必要はありません。 VAR変数が「プライベート(VAR)、」持っていない場合例:

    class Person { 
        private var variable: String = "" // you need to initialize it 
        private var _variable2: String? 
    
        var variable2: String { 
         get { 
          return _variable2 ?? "no value" // returns value or "no value" string 
         } 
         set { 
          self._variable2 = newValue 
         } 
        } 
    
    
    } 
    
3

公開されているget-only計算されたプロパティを持つプライベートストアドプロパティは、変数をパブリックにするが、セッターをプライベートに保つように設計されたパターンです。あなたはfullnameその後、暗黙的に開封されたようにこれらを定義した場合、

注:これを達成するための、より簡潔な方法は、これらの計算されたプロパティの必要性を排除し、保存されたプロパティのプライベートセッターを指定することです上記のように、計算されたプロパティはそれらを安全にアンラップしたいかもしれません。

や名前が変更できない場合、あなたはイニシャライザによって設定され、決して再び変更される定数であることを、それらを定義することができます:

struct Person { 
    let firstname: String! 
    let lastname: String! 

    var fullname: String { 
     return "\(firstname ?? "") \(lastname ?? "")" 
    } 
} 

全く無関係に、私は私がしたいかわかりませんこの状況で暗黙的にラップされたオプションをアドバイスします。暗黙のうちにアンラップされたオプションの目的は、イニシャライザで設定できなかったプロパティのためですが、一度設定されると決してnilになりません。

多くの場合、連絡先を扱うときは、nilのような状況を考えなければなりません。その場合、暗黙的にアンラップされたオプション(例えば、私は!ではなく?を使用するかもしれません)にしません。または、もし彼らがnilになることができなかったら、私はイニシャライザにそれらを設定して、それらをオプションにしないでください。それはすべて、この定義でキャプチャするビジネスルールに依存します。私はあなたがこれらの暗黙的にアンラップされたオプションを作る良い理由があったと仮定しようとしますが、将来の読者のために、暗黙のうちにアンラップされたオプションを気軽に使うことには注意が必要です。

関連する問題