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

üzerinde kullanamazsınız Yukarıda çalıştırmaya çalıştığım işlev ve aşağıda metin alanlarımdaki verileri oluşturmaya ve depolamaya çalıştığım sınıftır. "Örnek üye" firstName "hatası," Kişi Kişisinde kullanılamaz ". Sınıfımın kurulup düzgün bir şekilde başlatılmış olması neredeyse olumluydu, bu yüzden sorunun ne olabileceğini göremedim?Örnek üye,

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

kullanarak Personörneği oluşturma ama class' ve 'Nesnesi'' arasındaki farkı anlamak sanmıyorum ve bu kadar OOP'un çok önemli bir özelliği. Bir kitap almanızı ve OOP'un temellerini okumaya başlamanızı öneririm. – EmilioPelaez

cevap

2

hata iletisi sınıf (yazın) özelliklerini Person arayamazsın söylüyor.

verilen başlatıcı Kaba olmak istemiyoruz

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

Teşekkürler, bu sorunumu giderdi –

0

"Örnek üye" firstName "tipte kullanılamaz" Kişi mükemmel bir açıklamadır.

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' 
Bunu özellikleri ayarlamak amacıyla Kişinin bir örneğini oluşturmak gerekir
+0

Peki, bunu nasıl düzeltirim? –

1

: de yapmak:

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

veya Kişi sınıfına argümanları almaz bir init yöntemi ekleyin

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

Bu bana başka bir hata veriyor "Argüman olmadan" Kişi "için başlatıcı türü çağrılabilir değil" –