这里有什么错误:实例成员不能用于types

我有下面的代码,我很困惑这个错误消息:

实例成员'mydate'不能用于'TableViewController'types

码:

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) ] 

当我写下面的,我可以build立它,但我不知道为什么奥德代码片段不工作:

 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) ] 

这里的问题是,在完全初始化类之前,您正在使用self 。 你可以有一个getter,每次访问variables时都会被调用,或者懒惰的计算。

这里是一些代码:

 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) ] } } } 

懒惰计算:

 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) ] }() } 

你可以使用这个代码

 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) ] } } 

编译器会感到困惑,因为它不知道可选NSDate的types。 你可以让它知道明确的types。

 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) ] 

编辑:对于使用实例variables的问题,你可以用闭包初始化你的项目。

 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) ] }()