Swiftpack.co - Package - BellAppLab/Weakable

Weakable Version License

Platforms Swift support CocoaPods Compatible Carthage compatible Swift Package Manager compatible Twitter


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.



  • iOS 9+
  • watchOS 3+
  • tvOS 9+
  • macOS 10.11+
  • Swift 3.3+


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:
let weakTestObject = Weak(aTestObject)

//Or using the shorthand operator ≈
let anotherWeakTestObject = ≈test

Access your variable:

weakTestObject.object //returns your value as an optional, since it may or may not have been released


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
let weakObject = Weak(object)

let weakObject = ≈object
  • postfix operator ≈
    • Shorthand accessor for Weak:
//Given a Weak
let weakObject = ≈object

//you can access the underlying object by

  • infix operator ≈
    • Shorthand assignment for Weak:
//Given a Weak
var weakObject = ≈object

//you can change the underlying object by
weakObject.object = anotherObject

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.



pod 'Weakable', '~> 1.0'

Then import Weakable where needed.


github "BellAppLab/Weakable" ~> 1.0

Then import Weakable where needed.

Swift Package Manager

dependencies: [
    .package(url: "https://github.com/BellAppLab/Weakable", from: "1.0.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.


Bell App Lab, apps@bellapplab.com


Logo image by Артур Абт from The Noun Project


Weakable is available under the MIT license. See the LICENSE file for more info.


Stars: 0
Help us keep the lights on


Used By

Total: 0