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 = ≈test
Access your variable:
weakTestObject.object //returns your value as an optional, since it may or may not have been released
Operators
Weakable comes with 3 operators, all using the ≈ character (⌥ + x).
prefix ≈
Shorthand contructor for a Weak variable:
//Given an object
let object = AwesomeClass()
//you can create a Weak by either
var weakObject = Weak(object)
//or
var weakObject = ≈object
postfix operator ≈
Shorthand accessor for Weak:
//Given a Weak
var weakObject = ≈object
//you can access the underlying object by
weakObject.object
//or
weakObject≈
infix operator ≈
Shorthand assignment for Weak:
//Given a Weak
var weakObject = ≈object
//you can change the underlying object by
weakObject.object = anotherObject
//or
weakObject ≈ anotherObject
Arrays 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 it
You 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.
Weakable

Weakable is an easy way to hold
weakreferences in Swift.With Weakable you can create weak arrays, weak dictionaries and many other cool things.
😎
Requirements
Usage
Declare your
Weakvariable in one of the two ways provided:Access your variable:
Operators
Weakablecomes with 3 operators, all using the≈character (⌥ + x).prefix ≈Weakvariable:postfix operator ≈Weak:infix operator ≈Weak:Arrays and Dictionaries
You can safely store your
Weakvariables in collections (eg.[Weak<TestClass>]). The underlaying objects won’t be retained.You can also quickly “unwrap” the elements in a
Weakcollection:The variable
testswill now be a[TestClass]containing only the elements that haven’t been released yet.Installation
Cocoapods
Then
import Weakablewhere needed.Carthage
Then
import Weakablewhere needed.Swift Package Manager
Then
import Weakablewhere needed.Git Submodules
Then drag the
Weakablefolder into your Xcode project.Author
Bell App Lab, apps@bellapplab.com
Credits
Logo image by Артур Абт from The Noun Project
License
Weakable is available under the MIT license. See the LICENSE file for more info.