2016-04-21 56 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。但是,只要你没有二传手,这个值就会保持不变。

相关问题