2015-09-21 13 views
37

üzerinde kullanılamaz Aşağıdaki kod var ve bu hata iletisi hakkında karıştı: 'TableViewController'Ne yanlış burada: Örnek üyesi tip

türüne kullanılamaz

Örnek üyesi 'mydate'

Kodu:

class TableViewController: UITableViewController {  
    let mydate = NSDate() 
    let items = [ 
     (1, 9, 7, "A", mydate), 
     (2, 9, 7, "B", mydate), 
     (3, 9, 7, "C", mydate), 
     (4, 9, 7, "D", mydate) 
    ] 

ben aşağıdakileri yazarken, bunu inşa edebilirsiniz ama oder pasajı neden çalışmadığını bilmiyorum:

class TableViewController: UITableViewController {  
    let mydate = NSDate() 
    let items = [ 
     (1, 9, 7, "A", nil), 
     (2, 9, 7, "B", mydate), 
     (3, 9, 7, "C", mydate), 
     (4, 9, 7, "D", mydate) 
    ] 
+0

Ben de aynı şeyi koştu kullanabilirsiniz Burada

bazı kodudur. En temiz seçeneğiniz bunları sınıfta tanımlamak, ancak bunları viewDidLoad() func öğenizde doldurmaktır. Bu, bu can sıkıcı derleme hataları olmadan istediğiniz tüm iç içe geçirmenizi sağlayacaktır. –

+2

@ MarkLöwe, bu 'en temiz çözüm' değil. Ve bu derleyici hataları geçerli ve dilin tasarımıyla tutarlı. En temiz çözüm, burada yazılı çözümdür. "viewDidLoad" öğesinde başlatıcı, denetleyicisiz olmayan sınıflarda bile mümkün olmayabilir. Saçma sapan yorumlarla insanları yanlış yönlendirmeyelim. – avismara

+0

dahili statik var mydate: NSDate; dahili statik var öğeler; Bu –

cevap

39

Buradaki sorun sınıfı tam olarak başlatıldığını önce self kullanıyor olmasıdır. Değişkene her eriştiğinizde veya tembelce hesaplamanız gereken bir alıcıya sahip olabilirsiniz.

class TableViewController: UITableViewController { 
    let mydate = NSDate() 
    var items : [(Int,Int,Int,String,NSDate)] { 
     get { 
      return [ 
       (1, 9, 7, "A", mydate), 
       (2, 9, 7, "B", mydate), 
       (3, 9, 7, "C", mydate), 
       (4, 9, 7, "D", mydate) 
      ] 

     } 
    } 
} 

Tembel hesaplama:

class TableViewController: UITableViewController { 
    let mydate = NSDate() 
    lazy var items : [(Int,Int,Int,String,NSDate)] = { 

      return [ 
       (1, 9, 7, "A", self.mydate), 
       (2, 9, 7, "B", self.mydate), 
       (3, 9, 7, "C", self.mydate), 
       (4, 9, 7, "D", self.mydate) 
      ] 


    }() 
} 
+0

Bana bir örnek verebilir misiniz? – gurehbgui

+0

İşte gidiyorsun. Bu çalışıyor. – avismara

+0

Çalışıyor, teşekkürler. – gurehbgui

-1

İsteğe bağlı NSDate türünü bilmediği için derleyici karışık olur. Tip hakkında açık bir şekilde bildirebilirsiniz.

let items : Array<(Int, Int, Int, String, NSDate?)> = [ 
    (1, 9, 7, "A", nil), 
    (2, 9, 7, "B", mydate), 
    (3, 9, 7, "C", mydate), 
    (4, 9, 7, "D", mydate) 
] 

Düzenleme: örnek değişkeni kullanarak sorunu, bir kapakla öğeleri initialise başladı.

let items : Array<(Int, Int, Int, String, NSDate?)> = { 
    let mydate = NSDate() 
    return [ 
     (1, 9, 7, "A", nil), 
     (2, 9, 7, "B", mydate), 
     (3, 9, 7, "C", mydate), 
     (4, 9, 7, "D", mydate) 
    ] 
    }() 
+0

düzeltmek için kolay bir yoldur. Hala bu düzeltme ile hatayı alma – gurehbgui

3

Bu kod

var items:Array<(Int, Int, Int, String, NSDate)> { 
     get { 
      return [ 
       (1, 9, 7, "A", mydate), 
       (2, 9, 7, "B", mydate), 
       (3, 9, 7, "C", mydate), 
       (4, 9, 7, "D", mydate) 
      ] 
     } 
    } 
İlgili konular