https://github.com/bellapplab/laziable
When 'lazy var' doesn't cut it, have a truly Lazy variable in Swift.
https://github.com/bellapplab/laziable
carthage cocoapods ios lazy linux macos osx swift swift-package-manager tvos watchos
Last synced: 8 months ago
JSON representation
When 'lazy var' doesn't cut it, have a truly Lazy variable in Swift.
- Host: GitHub
- URL: https://github.com/bellapplab/laziable
- Owner: BellAppLab
- License: mit
- Created: 2018-07-13T06:22:32.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2019-04-29T17:27:46.000Z (almost 7 years ago)
- Last Synced: 2025-06-21T22:07:03.925Z (9 months ago)
- Topics: carthage, cocoapods, ios, lazy, linux, macos, osx, swift, swift-package-manager, tvos, watchos
- Language: Swift
- Homepage:
- Size: 156 KB
- Stars: 2
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Laziable [](#installation) [](#license)
[](#installation)
[](#swift-versions-support)
[](https://cocoapods.org/pods/Laziable)
[](https://github.com/Carthage/Carthage)
[](http://twitter.com/BellAppLab)

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.
You poor thing.
[They don't](https://stackoverflow.com/a/40847994).
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.
```swift
class TestClass
{
let lazyString = §{
return "testString"
}
let lazyDouble: Lazy = Lazy {
return 0.0
}
let lazyArray = Lazy {
return ["one", "two", "three"]
}
}
```
Access your variable:
```swift
let testObject = TestClass()
print(testObject.lazyString§) //prints out "testString"
```
Set your variable to `nil`, so it gets reconstructed again later:
```swift
let testObject = TestClass()
testObject.lazyDouble §= nil
```
## Operators
* `prefix §`
* Shorthand contructor for a `Lazy` variable:
```swift
let lazyThing = §{
return <#code#>
}
```
* `postfix operator §`
* Shorthand accessor for `Lazy`:
```swift
let lazyString = §{
return "Much cool"
}
print(lazyThing§) //prints out "Much cool"
```
* `infix operator §=`
* Shorthand assignment for `Lazy`:
```swift
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.
## Installation
### Cocoapods
```ruby
pod 'Laziable', '~> 1.1'
```
Then `import Laziable` where needed.
### Carthage
```swift
github "BellAppLab/Laziable" ~> 1.1
```
Then `import Laziable` where needed.
### Swift Package Manager
```swift
dependencies: [
.package(url: "https://github.com/BellAppLab/Laziable", from: "1.1.0")
]
```
Then `import Laziable` where needed.
### Git Submodules
```
cd toYourProjectsFolder
git submodule add -b submodule --name Laziable https://github.com/BellAppLab/Laziable.git
```
Then drag the `Laziable` folder into your Xcode project.
## Author
Bell App Lab, apps@bellapplab.com
### Credits
[Logo image](https://thenounproject.com/search/?q=lazy&i=1604294#) by [Georgiana Ionescu](https://thenounproject.com/georgiana.ionescu) from [The Noun Project](https://thenounproject.com/)
## License
Lazy is available under the MIT license. See the LICENSE file for more info.