2017-05-03 11 views
0

私はここに新たなんだと私はスウィフトでいくつかの運動をやっていると私は、この問題が見つかりました:私はこのコードを実行しようとするとセグメンテーションフォールト

私は、セグメンテーションフォールトを取得し、私は理解できませんなぜか。

class Persona{ 
    private var nome:String? 
    private var cognome:String? 
    private var eta:Int? 

    public var Sesso:String{ 
     get{ 
      return Sesso 
     } 
     set{ 
      if newValue=="M" || newValue == "m" { 
       Sesso="Maschio" 
      } 
      else{ 
       Sesso="Femmina" 
      } 
     } 
    } 
    init(nome:String, cognome:String, eta:Int) 
    { 
     self.nome=nome 
     self.cognome=cognome 
     self.eta=eta 
    } 
    init(){} 
    func getNome()->String{ return nome! } 
    func getCognome()->String{ return cognome! } 
    func getEta()->Int{ return eta! } 

    func setNome(nome:String)->(){ self.nome=nome } 
    func setCognome(cognome:String)->(){ self.cognome=cognome } 
    func setEta(eta:Int)->(){ self.eta=eta } 

} 
var p1 = Persona(nome:"AAAA",cognome:"BBBB",eta:22) 
p1.Sesso = "M" 
p1.setEta(eta:44) 
print("\(p1.getNome()) \t \(p1.getCognome()) \t \(p1.getEta()) \t \(p1.Sesso)") 
p1.setEta(eta:22) 
+0

私はエラーメッセージ、単に一般的な「エラーを得ない質問 –

+0

に沿っても、エラーメッセージを投稿してください"IBM Swift SandboxのXcodeプレイグラウンドと"セグメンテーションフォールトまたは類似のエラー "から – MogaWine

答えて

1

あなたは基本的には、実際に値を格納しない格納されたプロパティ、クラス、構造体、および列挙型は、計算されたプロパティを定義することができ、ほかにcomputed property

を使用しようとしています。代わりに、他のプロパティと値を間接的に取得して設定するためのゲッタとオプションのセッタを提供します。

ここでのキーは、実際に値「を格納していない」です。 getを使用しようとすると、より明確に見ることができます。print(p1.Sesso)は、ゲッターの無限ループに何度も繰り返し呼び出されるため、クラッシュを引き起こします。あなたがすべきことは、計算プロパティを定義しますが、同時に、実際にデータを保持している別の保存されたプロパティを定義している:

private var _sesso:String = "" 
public var Sesso:String{ 
    get{ 
     return _sesso 
    } 
    set{ 
     if newValue=="M" || newValue == "m" { 
      _sesso="Maschio" 
     } 
     else{ 
      _sesso="Femmina" 
     } 
    } 
} 
+0

ありがとう、私は"バックアップ "varを使用する必要があります – MogaWine

0

問題は、独自のゲッターとセッターで変数にアクセスできないということです。

代わりに、didSet

public var Sesso : String{ 
    didSet { 
     if Sesso == "M" || Sesso == "m" { 
      Sesso = "Maschio" 
     } 
     else{ 
      Sesso = "Femmina" 
     } 
    } 
} 

を使用することができますし、this答えからゲッターとセッターについての詳細を知ることができ、また、より多くの明確化のためにapple documentation on Propertiesを確認することができます。

関連する問題