Weakable

Weakable is an easy way to hold weak references in Swift.
With Weakable you can create weak arrays, weak dictionaries and many other cool things.
Requirements
- iOS 9+
- watchOS 3+
- tvOS 9+
- macOS 10.11+
- Swift 3.3+
Usage
Declare your Weak variable in one of the two ways provided:
//Given a class
class TestClass {}
//and an instance of that class
var aTestObject = TestClass()
//You can create a Weak like this:
var weakTestObject = Weak(aTestObject)
//Or using the shorthand operator ≈
var anotherWeakTestObject = ≈testAccess your variable:
weakTestObject.object //returns your value as an optional, since it may or may not have been releasedOperators
Weakable comes with 3 operators, all using the ≈ character (⌥ + x).
prefix ≈- Shorthand contructor for a
Weakvariable:
- Shorthand contructor for a
//Given an object
let object = AwesomeClass()
//you can create a Weak by either
var weakObject = Weak(object)
//or
var weakObject = ≈objectpostfix operator ≈- Shorthand accessor for
Weak:
- Shorthand accessor for
//Given a Weak
var weakObject = ≈object
//you can access the underlying object by
weakObject.object
//or
weakObject≈infix operator ≈- Shorthand assignment for
Weak:
- Shorthand assignment for
//Given a Weak
var weakObject = ≈object
//you can change the underlying object by
weakObject.object = anotherObject
//or
weakObject ≈ anotherObjectArrays and Dictionaries
You can safely store your Weak variables in collections (eg. [Weak<TestClass>]). The underlaying objects won't be retained.
var tests = (1...10).map { TestClass() } // 10 elements
var weakTests = tests.map { ≈$0 } // 10 elements
tests.removeLast() // `tests` now have 9 elements, but `weakTests` have 10
weakTests = weakTests.filterWeaks() // `weakTests` now have 9 elements too, since we dropped the released objects from itYou can also quickly "unwrap" the elements in a Weak collection:
let tests = weakTests.compactWeaks()The variable tests will now be a [TestClass] containing only the elements that haven't been released yet.
Installation
Cocoapods
pod 'Weakable', '~> 1.0'Then import Weakable where needed.
Carthage
github "BellAppLab/Weakable" ~> 1.0Then import Weakable where needed.
Swift Package Manager
dependencies: [
.package(url: "https://github.com/BellAppLab/Weakable", from: "1.0")
]Then import Weakable where needed.
Git Submodules
cd toYourProjectsFolder
git submodule add -b submodule --name Weakable https://github.com/BellAppLab/Weakable.git
Then drag the Weakable folder into your Xcode project.
Author
Bell App Lab, [email protected]
Credits
Logo image by Артур Абт from The Noun Project
License
Weakable is available under the MIT license. See the LICENSE file for more info.

