So you declared a lazy var in Swift thinking it would behave like lazily instantiated variables in good ol’ Objective-C. You thought you would set them to nil and they would reconstruct themselves later on when needed.
So why not bring that awesomeness back to Swift in a very lightweight way?
Specs
iOS 9+
watchOS 3+
tvOS 9+
watchOS 3+
macOS 10.10+
Swift 4.2+
Usage
Declare your Lazy variable in one of the three ways provided:
Suggestion: for the best results, use let when declaring your Lazy variables.
class TestClass
{
let lazyString = §{
return "testString"
}
let lazyDouble: Lazy<Double> = Lazy {
return 0.0
}
let lazyArray = Lazy {
return ["one", "two", "three"]
}
}
Access your variable:
let testObject = TestClass()
print(testObject.lazyString§) //prints out "testString"
Set your variable to nil, so it gets reconstructed again later:
let testObject = TestClass()
testObject.lazyDouble §= nil
Operators
prefix §
Shorthand contructor for a Lazy variable:
let lazyThing = §{
return <#code#>
}
postfix operator §
Shorthand accessor for Lazy:
let lazyString = §{
return "Much cool"
}
print(lazyThing§) //prints out "Much cool"
infix operator §=
Shorthand assignment for Lazy:
let lazyString = §{
return "Much cool"
}
lazyString §= nil //the string "Much cool" has been destroyed
print(lazyThing§) //reconstructs the string and prints out "Much cool"
Notes
For the best results, use let when declaring your Lazy variables.
Also, make sure to use [weak self] or [unowned self] if capturing self in a Lazy variable’s constructor.
Laziable

So you declared a
lazy var
in Swift thinking it would behave like lazily instantiated variables in good ol’ Objective-C. You thought you would set them tonil
and they would reconstruct themselves later on when needed.You poor thing.
They don’t.
So why not bring that awesomeness back to Swift in a very lightweight way?
Specs
Usage
Declare your
Lazy
variable in one of the three ways provided:Suggestion: for the best results, use
let
when declaring yourLazy
variables.Access your variable:
Set your variable to
nil
, so it gets reconstructed again later:Operators
prefix §
Lazy
variable:postfix operator §
Lazy
:infix operator §=
Lazy
:Notes
For the best results, use
let
when declaring yourLazy
variables.Also, make sure to use
[weak self]
or[unowned self]
if capturingself
in aLazy
variable’s constructor.Installation
Cocoapods
Then
import Laziable
where needed.Carthage
Then
import Laziable
where needed.Swift Package Manager
Then
import Laziable
where needed.Git Submodules
Then drag the
Laziable
folder into your Xcode project.Author
Bell App Lab, apps@bellapplab.com
Credits
Logo image by Georgiana Ionescu from The Noun Project
License
Lazy is available under the MIT license. See the LICENSE file for more info.