Traditionally we need to if let to strongSelf
addButton.didTouch = { [weak self] in guard let strongSelf = self, let product = strongSelf.purchasedProduct() else { return strongSelf.delegate?.productViewController(strongSelf, didAdd: product) } This is cumbersome, we can invent a higher order function to zip and unwrap the optionals
func with<A, B>(_ op1: A?, _ op2: B?, _ closure: (A, B) -> Void) { if let value1 = op1, let value2 = op2 { closure(value1, value2) } } addButton.didTouch = { [weak self] in with(self, self?.purchasedProduct()) { $0.delegate?.addProductController($0, didIncrease: $1) } } Original post https://github.com/onmyway133/blog/issues/326
Top comments (0)