Skip to content

Instantly share code, notes, and snippets.

@mendesbarreto
Created October 8, 2019 18:27
Show Gist options
  • Save mendesbarreto/750fb0f960afbcd12ca0db33f8bb13a3 to your computer and use it in GitHub Desktop.
Save mendesbarreto/750fb0f960afbcd12ca0db33f8bb13a3 to your computer and use it in GitHub Desktop.
This very useful to make the methods weak
//
// Created by Douglas Mendes on 2019-10-08.
// Copyright (c) 2019 Douglas Mendes. All rights reserved.
//
import Foundation
func weakify<TargetType: AnyObject>(_ target: TargetType,
_ targetMethod: @escaping (TargetType) -> () -> Void) -> (() -> Void) {
return { [weak target] in
if let strongReferenceTarget = target {
targetMethod(strongReferenceTarget)()
}
}
}
// swiftlint:disable identifier_name
func weakify<TargetType: AnyObject, U>(_ target: TargetType,
_ targetMethod: @escaping (TargetType) -> (U) -> Void) -> ((U) -> Void) {
return { [weak target] (u: U) in
if let strongReferenceTarget = target {
targetMethod(strongReferenceTarget)(u)
}
}
}
// swiftlint:disable identifier_name
func weakify<TargetType: AnyObject, U>(_ target: TargetType, _ targetMethod: @escaping (TargetType) -> (U?) -> Void)
-> ((U?) -> Void) {
return { [weak target] (u: U?) in
if let strongReferenceTarget = target {
targetMethod(strongReferenceTarget)(u)
}
}
}
// swiftlint:disable identifier_name
func weakify<TargetType: AnyObject, U, V>(_ target: TargetType,
_ targetMethod: @escaping (TargetType)
-> (U?, V) -> Void) -> ((U?, V) -> Void) {
return { [weak target] (u: U?, v: V) in
if let strongReferenceTarget = target {
targetMethod(strongReferenceTarget)(u, v)
}
}
}
func weakify<TargetType: AnyObject, U, V>(_ valueForSelf: TargetType,
_ targetMethod: @escaping (TargetType) -> (U, V) -> Void)
-> ((U, V) -> Void) {
return { [weak valueForSelf] (u: U, v: V) in
if let valueForSelf = valueForSelf {
targetMethod(valueForSelf)(u, v)
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment