Swift开发第四篇——柯里化

本篇分为两部分:

一、柯里化的基本使用

二、柯里化的使用场景



一、柯里化的基本使用

柯里化(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()
    }
}
时间: 2024-10-06 04:31:37

Swift开发第四篇——柯里化的相关文章

swift 学习笔记之在柯里化(Currying)

有时候我们看到的方法中有很多组的参数,可能会让大家觉得疑惑,其实是因为这个方法使用了柯里化.Swift里可以对方法进行柯里化,也就说有多个参数的方法可以接受第一个参数,然后变成一个接受余下参数并且返回结果的新方法,举个例子: func twoTemp(a:Int)(b:Int) -> Int{ return a + b } 这个方法有两组参数,可以只传第一个参数: let oneTemp = twoTemp(1) 这里的oneTemp是一个新的方法,类型如图所示 这个新方法接受剩下的b作为参数,

Swift # 柯里化函数

前言 此次文章,讲述的是Swift的一个新特性(柯里化函数),可能很多iOS开发人员是第一次听这个词汇,包括我自己也是,自己也用了几天时间才总结出来,希望能帮助到各位咯,个人感觉偏向有开发经验的码友,如果零基础的看懂,希望能给个赞,??! 如果喜欢我的文章,可以关注我,随着后续不断学习Swift中,陆续还会有更新ing.... 什么是柯里化函数? 柯里化(Currying),又称部分求值(Partial Evaluation),是一种函数式编程思想,就是把接受多个参数的函数转换成接收一个单一参数

Swift函数柯里化(Currying)简谈

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 下面简单说说Swift语言中的函数柯里化简单的说就是把接收多个参数的函数划分为若干个"嵌套"的单一参数的函数. 这样说谁也听不懂,我们结合一个例子给大家简单说说. 我们需要定义一个函数A,该函数返回一个函数B,函数B创建一只大蜘蛛.为什么要间接返回大蜘蛛,因为本猫最怕大蜘蛛,所以不敢直接返回大蜘蛛 ;) 首先是蜘蛛的类: class Spider:C

深入详解函数的柯里化

深入详解函数的柯里化 一.补充知识点之函数的隐式转换 JavaScript作为一种弱类型语言,它的隐式转换是非常灵活有趣的.当我们没有深入了解隐式转换的时候可能会对一些运算的结果会感动困惑,比如4 + true = 5.当然,如果对隐式转换了解足够深刻,肯定是能够很大程度上提高对js的使用能力.只是我没有打算将所有的隐式转换规则分享给大家,这里暂时只分享一下,函数在隐式转换中的一些规则. 来一个简单的思考题. 1 2 3 4 5 function fn() { return 20; } cons

关于柯里化函数

柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术. 特点: 参数复用 – 复用最初函数的第一个参数 提前返回 – 返回接受余下的参数且返回结果的新函数 延迟执行 – 返回新函数,等待执行 在编程开发中,使用柯里化函数封装解决问题的例子主要有: 兼容浏览器事件监听方法 性能优化:防抖和节流 兼容低版本IE的bind方法 例:设计一个柯里化函数(currying ),实现sum(100,200)(3

[Swift]Day07:柯里化

Swift 中的柯里化 新手上路的学习笔记,如有错误还望指出,不胜感激. 上集:理论预备 在学习柯里化的过程中接触到了三个有趣的概念,在此和各位分享一下. 偏函数 (Partial Function) 偏函数是只对函数定义域的一个子集进行定义的函数,是一个数学概念. 偏函数定义如下: 从输入值集合 X 到可能的输出值集合 Y 的函数 f (记作f:X→Y) 是 X 和 Y 的关系,若 f 满足多个输入可以映射到一个输出,但一个输入不能映射到多个输出,则为偏函数. 换句话说,定义域 X 中可能存在

深入理解javascript函数进阶系列第二篇——函数柯里化

前面的话 函数柯里化currying的概念最早由俄国数学家Moses Schönfinkel发明,而后由著名的数理逻辑学家Haskell Curry将其丰富和发展,currying由此得名.本文将详细介绍函数柯里化(curring) 定义 currying又称部分求值.一个currying的函数首先会接受一些参数,接受了这些参数之后,该函数并不会立即求值,而是继续返回另外一个函数,刚才传入的参数在函数形成的闭包中被保存起来.待到函数被真正需要求值的时候,之前传入的所有参数都会被一次性用于求值 从

swift 柯里化

如何将一个接受多参数的函数变换为一系列只接受单个参数的函数,这个过程被称为柯里化 (Currying) 参照:objc.io|objc 中国 /** 1.add0 和 add的例子向我们展示了如何将一个接受多参数的函数变换为一系列只接受单个参数的函数,这个过程被称为柯里化 (Currying),它得名于逻辑学家 Haskell Curry;我们将 add 称为 add0 的柯里化版本 2.首先向函数传递第一个参数 1,然后将返回的函数应用到第二个参数 2 3.我们甚至可以省略 addTheSom

scala akka 修炼之路6(scala函数式柯里化风格应用场景分析)

胜败兵家事不期,包羞忍耻是男儿--斗牛士fighting,fighting,fighting... 小象学习和使用scala也一段时间了,最初小象学习scala主要为了学习spark生态,但是深入学习scala的一些特性后,深深被scala函数式和面向对象的风格所折服,不得不赞美设计这门语言的设计者.小象大学阶段在使用MATLAB做数据分析和自动化设计时,就非常喜欢使用MATLAB的命令行和面向矩阵运算的风格编写分析代码:喜欢使用java编写层次化和清晰的模块接口,而这些Scala语言设计中都有