Lazy var giving 'Instance member can not be used on type' error

I had this error several times now and I resorted to different workarounds, but I'm really curious why it happens. Basic scenario is following:

class SomeClass {
  var coreDataStuff = CoreDataStuff!
  lazy var somethingElse = SomethingElse(coreDataStuff: coreDataStuff)
}

So I understand I can not use self before class is fully initialised, but in this case I'm using self property coreDataStuff to initialise a lazy var which will not happen until my instance is ready.

Anybody could explain me why I'm getting Instance member can not be used on type error?

Answers


Try that :

class SomeClass {
  var coreDataStuff = CoreDataStuff!
  lazy var somethingElse: SomethingElse = SomethingElse(coreDataStuff: self.coreDataStuff)
}

It is important to precise the type of your lazy var and to add self. to the argument you pass


There are two requirements that are easily overlooked with lazy variables in Swift, and, unfortunately, the warnings are cryptic and don't explain how to fix it.

Lazy Variable Requirements
  1. Use self.: When referring to instance members, you must use self.. (E.g. self.radius.)

    If you forget to use self., you'll get this error:

    Instance member 'myVariable' cannot be used on type 'MyType'

  2. Specify the type: The type cannot be inferred, it must be explicitly written. (E.g. : Float.)

    If you forget to specify the type, you'll get this error:

    Use of unresolved identifier 'self'

Example
struct Circle {
  let radius: Float
  lazy var diameter: Float = self.radius * 2 // Good
//lazy var diameter        =      radius * 2 // Bad (Compile error)
}

Need Your Help

Forecasting time series data

r time-series xts

I've done some research and I am stuck in finding the solution. I have a time series data, very basic data frame, let's call it x: