Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/vincent-pradeilles/weakable-self

A Swift micro-framework to easily deal with weak references to self inside closures
https://github.com/vincent-pradeilles/weakable-self

closures ios memory-management swift syntax

Last synced: about 1 month ago
JSON representation

A Swift micro-framework to easily deal with weak references to self inside closures

Awesome Lists containing this project

README

        

# WeakableSelf

![platforms](https://img.shields.io/badge/platforms-iOS%20%7C%20macOS%20%7C%20tvOS%20%7C%20watchOS-333333.svg)
![pod](https://img.shields.io/cocoapods/v/WeakableSelf.svg)
[![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage)

## Context

Closures are one of Swift must-have features, and Swift developers are aware of how tricky they can be when they capture the reference of an external object, especially when this object is `self`.

To deal with this issue, developers are required to write additional code, using constructs such as `[weak self]` and `guard`, and the result looks like the following:

```swift
service.call(completion: { [weak self] result in
guard let self = self else { return }

// use weak non-optional `self` to handle `result`
})
```

## Purpose of `WeakableSelf`

The purpose of this micro-framework is to provide the developer with a helper function `weakify` that will allow him to declaratively indicate that he wishes to use a weak non-optional reference to `self` in closure, and not worry about how this reference is provided.

## Usage

Using this `weakify` function, the code above will be transformed into the much more concise:

```swift
import WeakableSelf

service.call(completion: weakify { strongSelf, result in
// use weak non-optional `strongSelf` to handle `result`
})
```

`weakify` works with closures that take up to 7 arguments.

## Installation

### Requirements

* Swift 4.2+
* Xcode 10+

### CocoaPods

Add the following to your `Podfile`:

`pod "WeakableSelf"`

### Carthage

Add the following to your `Cartfile`:

`github "vincent-pradeilles/weakable-self"`