ios - que - Lazy var da el ''error de tipo instancia no se puede usar en el tipo''
lateinit kotlin que es (2)
Tuve este error varias veces y recurrí a diferentes soluciones, pero tengo mucha curiosidad por qué sucede. El escenario básico es el siguiente:
class SomeClass {
var coreDataStuff = CoreDataStuff!
lazy var somethingElse = SomethingElse(coreDataStuff: coreDataStuff)
}
Así que entiendo que no puedo usar self antes de que la clase esté completamente inicializada, pero en este caso estoy usando self property coreDataStuff
para inicializar una var floja que no sucederá hasta que mi instancia esté lista.
¿Alguien podría explicarme por qué Instance member can not be used on type
error de Instance member can not be used on type
?
Hay dos requisitos que son fácilmente pasados por alto con variables perezosas en Swift y, desafortunadamente, las advertencias son crípticas y no explican cómo solucionarlo.
Requisitos variables perezosos
Usa el
self.
: Cuando se refiere a miembros de instancia, debe usarself.
. (Por ejemplo,self.radius
.)Si te olvidas de usar el
self.
, obtendrá este error:El miembro de instancia ''myVariable'' no se puede usar en el tipo ''MyType''
Especifique el tipo: el tipo no se puede inferir, se debe escribir explícitamente. (Por ejemplo
: Float
.)Si olvida especificar el tipo, obtendrá este error:
Uso del identificador no resuelto ''self''
Ejemplo
struct Circle {
let radius: Float
lazy var diameter: Float = self.radius * 2 // Good
//lazy var diameter = radius * 2 // Bad (Compile error)
}
Trata eso :
class SomeClass {
var coreDataStuff = CoreDataStuff!
lazy var somethingElse: SomethingElse = SomethingElse(coreDataStuff: self.coreDataStuff)
}
Es importante precisar el tipo de su var perezosa y agregarse self.
al argumento que pasas