2016-04-21 33 views
0

我發現了一些其他問題,但沒有解決方案工作,也許我的情況在某些關鍵方面不同。下面的代碼:在自定義類中初始化一個日期會導致錯誤:「實例成員不能用於類型」

class ToDoList { 

    let date = NSDate() 
    let calendar = NSCalendar.currentCalendar() 
    let components = calendar.components([.Day , .Month , .Year], fromDate: date) 

    let dateCreated : Int = components.year*10_000 + components.month*100 + components.day //TD: take YYYYMMDD from NSDate each initialization 
    ... 
} 

的XCode錯誤:

"Instance member 'calendar' cannot be used on type 'ToDoList'.

我曾嘗試與getter實現組件作爲變量,而不是,但沒有成功。

謝謝!

回答

0

類TodoList的{

let dateCreated : Int 

init(){ 
    let date = NSDate() 
    let calendar = NSCalendar.currentCalendar() 
    let components = calendar.components([.Day , .Month , .Year], fromDate: date) 

    dateCreated = components.year*10_000 + components.month*100 + components.day //TD: take YYYYMMDD from NSDate each initialization } 
    // do other stuff ..... 

}

}

我由init()函數之外聲明dateCreated會,然後對其進行初始化的init()函數內解決了這個問題。

0

根據其他實例變量的值,不能在類的頂層聲明屬性或實例變量。

你可以使用一個計算的屬性

class ToDoList { 

    var dateCreated : Int { 
    let date = NSDate() 
    let calendar = NSCalendar.currentCalendar() 
    let components = calendar.components([.Day , .Month , .Year], fromDate: date) 
    return components.year * 10_000 + components.month * 100 + components.day 
    } 

} 

或懶惰的實例變量

class ToDoList { 

    lazy var dateCreated : Int = { 
    let date = NSDate() 
    let calendar = NSCalendar.currentCalendar() 
    let components = components([.Day , .Month , .Year], fromDate: date) 
    return components.year * 10_000 + components.month * 100 + components.day 
    }() 

} 
0

你可以聲明計算性能:

var components : NSDateComponents { 
    get { 
     return calendar.components([.Day , .Month , .Year], fromDate: date) 
    } 
} 

請注意,這將是var代替的let。但是,只要你沒有二傳手,這個值就會保持不變。