这里有什么错误:实例成员不能用于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) ] }()