Cannot override with a stored property in Swift

Although there's no technical reason why you cannot override a property with one that introduces storage (although it can raise ambiguities with observer overrides; see this Q&A for more info), Swift doesn't currently allow you to do so.

The fact that in 4.0 you could override a property with a lazy property was unintended (as the override introduces storage), and so you'll get a warning in 4.1 and an error in Swift 5 mode in order to preserve source compatibility (implemented in #13304).

You can however achieve the same result with a forwarding computed property though:

class A {
  lazy var myVar: String = "A"
}

class B : A {

  // Note that this isn't a particulary compelling case for using 'lazy', as
  // the initialiser expression is not expensive.
  private lazy var _myVar: String = "B"

  override var myVar: String {
    get { return _myVar }
    set { _myVar = newValue }
  }
}