2014-08-30 10 views
9

Yeni bir sınıfa çalışan bir Swift bahçesi ile uğraşırken yaşıyorum. Bazı nedenlerden ötürü, "tanımlanmış bir üç satırın adıyla daha önce sınıfın" bir üye türünün bulunmadığı yönünde bir hata almaya devam ediyorum. İşte kod:Türünde üye yok

import Foundation 
class DataModel { 
    let myCalendar = NSCalendar.autoupdatingCurrentCalendar() 

    var myData = [NSDate : Float]() 
    let now = NSDate() 
    let components = myCalendar.components(.CalendarUnitYear | .CalendarUnitMonth, fromDate: now) 
} 

Xcode beta6 DataModel.Type adında bir üye yok" diyerek, bana son satırında ikinci bir hata vermek tutar 'MyCalendar'

Bilmiyorum rağmen bir fark yapması gerektiğini düşünüyorum, myCalendar öğesini bir var olarak tanımlamayı denedim.

cevap

8

Aynı sınıfın başka bir örnek özelliğine başvuran bir örnek sınıfı özelliğini başlatamazsınız, çünkü hangi sırayla başlatılacağı garanti edilmez; bu nedenle (yanıltıcı) derleyici hatasını engeller

0 aşağıdaki gibi

Bir kurucusundaki başlatma taşımak zorunda:

let components: NSDateComponents 

init() { 
    self.components = myCalendar.components(.CalendarUnitYear | .CalendarUnitMonth, fromDate: now) 
} 
+0

Bir çekicilik gibi çalıştım. Teşekkür ederim Antonio! – user1790252

1

Ben kullanmak istemiyorsanız başka yolu struct yaratmak olabilir @Antonio katılıyorum init:

class DataModel { 

    struct MyStruct { 
     static var myCalendar:NSCalendar = NSCalendar.autoupdatingCurrentCalendar() 
     static let now = NSDate() 
    } 

    var myData = [NSDate : Float]() 

    var components = MyStruct.myCalendar.components(.CalendarUnitYear | .CalendarUnitMonth, fromDate: MyStruct.now) 
} 

Testi

var model:DataModel = DataModel() 
var c = model.components.year // 2014 
+0

Bu da işe yaradı; Antonio'nun cevabını yalnızca genel projem ile daha iyi uyuştuğu için doğru olarak işaretledim. Teşekkür ederim! – user1790252