Skip to content

Instantly share code, notes, and snippets.

@sisoje
sisoje / DeinitBlock+URLImageTableViewCell.swift
Last active February 1, 2019 13:47
Resource acquisition is initialization (RAII) in Swift: Example
class URLImageTableViewCell: UITableViewCell {
@IBOutlet weak var urlImageView: UIImageView!
var urlImageLoader: DeinitBlock?
// new task is created, old task cancelled automatically
func setImage(url: URL) {
urlImageLoader = urlImageView.setCachedImage(url: url)
}
}
@sisoje
sisoje / DeinitBlock+URLSessionDataTask.swift
Last active February 1, 2019 13:43
Resource acquisition is initialization (RAII) in Swift: Example
extension URLSessionDataTask {
var cancellation: DeinitBlock {
return DeinitBlock { [weak self] in
self?.cancel()
}
}
}
@sisoje
sisoje / DeinitBlock.swift
Last active August 18, 2020 15:01
Resource acquisition is initialization (RAII) in Swift: Implementation
class DeinitBlock {
let onDeinit: () -> Void
init(_ block: @escaping () -> Void) {
onDeinit = block
}
deinit {
onDeinit()
}
}