2016-04-07 7 views
0
@IBAction func saveDetails(sender: AnyObject) { 
     Person.firstName = firstNameTF.text 
     Person.lastName = lastNameTF.text 
} 

上記の関数は実装しようとしていますが、以下は、私のインスタンスを作成し、テキストフィールドのデータを格納しようとしているクラスです。エラー "インスタンスメンバー" firstName "はタイプPersonで使用できません"。私はクラスがセットアップされ、正しく初期設定されているので、問題が何かを知ることができないということはほぼ肯定的でした。インスタンスメンバーは型には使用できません

class Person { 
    var firstName : String = "" 
    var middleName : String? = nil 
    var lastName : String = "" 
    var yearOfBirth : Int? = nil 
    var age : Int! { 
     get { 
      guard let _ = yearOfBirth else { 
       return nil 
      } 
      return currentYear - yearOfBirth! 
     } 
     set { 
      yearOfBirth = currentYear - newValue 
     } 
    } 

    init(firstName: String, lastName: String, yearOfBirth: Int? = nil, middleName: String? = nil){ 
     self.firstName = firstName 
     self.lastName = lastName 
     self.yearOfBirth = yearOfBirth 
     self.middleName = middleName 
    } 
    convenience init(firstName: String, lastName: String, age: Int, middleName: String? = nil) { 
     self.init(firstName: firstName, lastName: lastName, yearOfBirth: nil, middleName: middleName) 
     self.age = age 
    } 

} 
+0

を使用してPersonインスタンスを作成します。 OOPの非常に重要な機能です。私はあなたが本を手に入れ、OOPの基礎を読むことを勧めます。 – EmilioPelaez

答えて

2

クラス(タイプ)Personのプロパティを呼び出すことができないというエラーメッセージが表示されます。

私は失礼な音にしたくないが、私はあなたが `class`と` object`の違いを理解してないと思うし、それはだ与えられた初期化子

@IBAction func saveDetails(sender: AnyObject) { 
    let person = Person(firstName:firstNameTF.text, lastName:lastNameTF.text) 
    // do something with person 
} 
+0

ありがとう、これは私の問題を修正 –

0

"インスタンスメンバー" firstName "はタイプPersonに使用できません"は完璧な説明です。

class C { 
    var s: String = "" 
    static var s1: String = "" 
} 


C.s1 = "alfa" 
//C.s = "alfa" // error: instance member 's' cannot be used on type 'C' 
let c0 = C() 
c0.s = "beta" 
//c0.s1 = "beta" // error: static member 's1' cannot be used on instance of type 'C' 
+0

どうすれば修正できますか? –

1

あなたは、そのプロパティを設定するために、人のインスタンスを作成する必要があります。

@IBAction func saveDetails(sender: AnyObject) { 
    let p = Person(firstName: firstNameTF.text!, lastName: lastNameTF.text!) 
} 

たり、Personクラス

に引数を取らないinitメソッドを追加します。 はこれを行うのいずれか
@IBAction func saveDetails(sender: AnyObject) { 
    let p = Person() 
    p.firstName = firstNameTF.text! 
    p.lastName = lastNameTF.text! 
} 
+0

これは私に別のエラー "引数なしで 'Person'の初期設定の型を呼び出せません" –

関連する問題