type que missing method lazy lateinit delegate ios swift lazy-evaluation

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

  1. Usa el self. : Cuando se refiere a miembros de instancia, debe usar self. . (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''

  2. 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