• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Swift开发第四篇——柯里化

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本篇分为两部分:

一、柯里化的基本使用

二、柯里化的使用场景

 


 

一、柯里化的基本使用

柯里化(Currying):也就是把接受多个参数的方法变换成接受第一个参数的方法,并且返回接受余下的参数并且返回结果的新方法。

func addTwoNumbers(a: Int)(num: Int) -> Int {
    return a + num
}

然后通过只传入第一个括号内的参数进行调用,这样将返回另一个方法

let addToFour = addTwoNumbers(4)
let result = addToFour(num: 6)


func greaterThan(comparor: Int)(input: Int) -> Bool {
    return input > comparor;
}

let greaterThan10 = greaterThan(10)
greaterThan10(input: 13)
greaterThan10(input: 9)

二、柯里化的使用场景

   柯里化是一种量产相似方法的好办法,可以通过柯里化一个方法模板来避免写出很多重复的代码,方便日后维护。但在 Swift 中 Selector 只能使用字符串生成,这样将难以重构,并且如果拼写错误很容易出错。但是 target-action 又是 Cocoa 中很重要的一种设计模式,我们可以利用柯里化对他进行改造达到更安全使用的目的。

protocol TargetAction {
    func performAction()
}

struct  TargetActionWrapper<T: AnyObject>: TargetAction {
    weak var target: T?
    let action: (T) -> () -> ()
    func performAction() -> () {
        if let t = target {
            action(t)()
        }
    }
}

enum ControlEvent {
    case TouchUpInsede
    case ValueChanged
}

class Control {
    var actions = [ControlEvent: TargetAction]()
    
    func setTarget<T: AnyObject>(target: T, action: (T) -> () -> (), controlEvent: ControlEvent) {
        actions[controlEvent] = TargetActionWrapper (target: target, action: action)
    }
    
    func removeTargetForControlEvent(controlEvent: ControlEvent) {
        actions[controlEvent] = nil
    }
    
    func performActionForControlEvent(controlEvent: ControlEvent) {
        actions[controlEvent]?.performAction()
    }
}

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
swift-UITextView的用法发布时间:2022-07-18
下一篇:
SwiftUITableView嵌套UICollectionView点击事件冲突(点击事件穿透)发布时间:2022-07-18
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap