While playing a little bit with Swift I tried to write a readonly and lazy initialized property. I quickly wrote that line of code just to learn that it\'s not allowed.
If readonly and private are synonyms for you in this specific case, then you can make the setter private by explicitly declaring it:
private(set) lazy var foo : Int = { return 42 }()
That's a good compromise between immutability and laziness.