transportation example español basics apple ios swift swift2

example - swift ios basics



Lo que está mal aquí: el miembro de instancia no se puede usar en el tipo (3)

Esta pregunta ya tiene una respuesta aquí:

Tengo el siguiente código y estoy confundido acerca de este mensaje de error:

El miembro de instancia ''mydate'' no se puede usar en el tipo ''TableViewController''

Código:

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

Cuando escribo lo siguiente, puedo compilarlo pero no sé por qué el fragmento de oder no funciona:

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


El compilador se confunde porque no conoce el tipo de NSDate opcional. Puedes dejarlo saber explícitamente sobre el tipo.

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

Editar: para el problema con el uso de la variable de instancia, puede inicializar sus elementos con un cierre.

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


El problema aquí es que estás usando self antes de que la clase esté completamente inicializada. Puede tener un getter que se invocará cada vez que acceda a la variable o la calcule de forma perezosa.

Aquí hay un código:

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

Cálculo perezoso:

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


Puedes usar este código

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