`
weiqingfei
  • 浏览: 318119 次
  • 性别: Icon_minigender_1
  • 来自: 黑洞
社区版块
存档分类
最新评论

swift类里的函数

    博客分类:
  • IOS
 
阅读更多

看一下swift对函数是怎么定义的

函数
方法是与某些特定类型相关联的函数。类、结构体、枚举都可以定义实例方法;实例方法为给定类型的实例封装了具体的任务与功能。

 

如果函数是在一个类里的话,用法通常和其他面向对象语言比如Java没啥区别。无非就是做成类实例,调用函数。

class Myclass{
   func hello(name:String){
      println("hello, \(name)")
   }
}

let mycls = Myclass()
mycls.hello("wqf")

 

但是和java一类语言不同的是,swift类(当然也包括结构体,枚举)里的函数都是柯里化的,而且接受类实例为参数,所以可以这么用

 

let helloFunc = Myclass.hello
let mycls = Myclass()
helloFunc(mycls)("wqf")

 

这种调用方法和上面那个是等价的。

但从形式上来看是不是有点儿像java的反射机制?不同的是那个用的是方法的字符串名,而且工作原理也不一样。

 

大家都知道swift里target-action的调用是没有办法用@selector的,都是直接指定字符串的。

指定字符串的好处当然就是比较自由,但是对于swift来说也面临着无法refactor的问题。

实际上既然类里的函数都是柯里化的,我觉得其实都可以直接用[类名.函数名]的形式来指定action了,由内部来按照上面的形式调用多好。

既然没这么做,那么我们可以自己这么做。

参照以下代码,来自这个blog

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 TouchUpInside
    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()
    }
}

 使用

class MyViewController {
    let button = Control()
    
    func viewDidLoad() {
        button.setTarget(self, action: MyViewController.onButtonTap, controlEvent: .TouchUpInside)
    }
    
    func onButtonTap() {
        println("Button was tapped")
    }
}

 

分享到:
评论

相关推荐

    swift类函数的使用

    在Swift中,类函数(Class Functions)是一种特殊类型的方法,它们属于类本身而不是类的实例。这意味着类函数不需要任何实例就可以被调用,它们是静态绑定的,即在编译时就已经确定了调用的对象。接下来,我们将深入...

    函数式编程中的Swift与Swift中的函数式编程

    在介绍“函数式编程中的Swift与Swift中的函数式编程”这一主题时,傅若愚首先提出了一个问题:“当我们谈论函数式编程时,我们在谈论些什么?”函数式编程是一种编程范式,它将计算视为数学函数的评估,并避免改变...

    Swift教程:函数篇 嵌套函数

    本教程将深入探讨Swift中的一个高级特性——嵌套函数,它是将函数定义在另一个函数内部的一种方法,有助于组织代码并提高代码的模块化。 嵌套函数的概念允许我们创建私有的辅助函数,这些函数仅在包含它们的外部...

    函数式 Swift

    《函数式 Swift》一书是面向Swift编程语言的开发者,特别是对函数式编程感兴趣的iOS和macOS开发者的重要参考资料。作者王巍(网名喵神,onevcat)是一位知名的iOS开发者和技术博主,他在书中深入浅出地介绍了如何将...

    函数式Swift.epub

    函数式Swift.epub函数式Swift.epub 函数式Swift.epub函数式Swift.epub函数式Swift.epub函数式Swift.epub函数式Swift.epub函数式Swift.epub函数式Swift.epub函数式Swift.epub函数式Swift.epub

    函数式 Swift4 最新版

    objc, objc.io 中国, 函数式 swift 王巍 喵神 onevcat swift4

    Swift教程:函数类型作为参数

    在Swift编程语言中,函数是一种强大的工具,它们不仅可以执行特定任务,还可以被用作其他函数的输入或输出。本教程将深入探讨一个高级概念——如何将函数类型作为参数。这在编写高度可重用和模块化的代码时尤其有用...

    Swift教程:函数篇 函数类型作为常量和变量

    在Swift编程语言中,函数是一种强大的工具,它们不仅可以执行特定任务,还可以被用作其他数据类型的替代品,比如常量和变量。本教程将深入探讨如何将函数类型作为常量和变量来使用,以增强代码的灵活性和复用性。 ...

    swift3.0函数手册

    2. Swift教程章节:从基础开始,包括基本运算符、字符串和字符处理、集合类型、控制流、函数、闭包、枚举、类和结构体、属性、方法、下标、继承、初始化、析构、自动引用计数(ARC)、可选链式调用等。 3. 语言参考...

    Swift中的函数柯里化 Function Currying

    Swift中的函数柯里化,是一种将多参数函数转化为一系列单参数函数的过程,使得函数可以逐步接收参数,并在所有参数提供完整之前返回一个新函数。这种技术源于数学家哈斯凯尔·伽罗瓦(Haskell Curry)的名字,因此被...

    函数式swift 函数式编程(中文版)高清pdf

    《函数式Swift》是面向Swift开发者的指南,旨在深入探索函数式编程(Functional Programming, FP)范式在Swift语言中的应用。Swift是苹果公司设计的一种强类型、安全和快速的编程语言,广泛用于iOS、macOS、watchOS...

    函数式Swift 已对应 Swift 4

    《函数式Swift》是一本深度探讨Swift编程语言中函数式编程思想的书籍,特别强调了其在Swift 4版本中的应用。函数式编程是一种编程范式,它将计算视为函数的求值,而不是状态的改变或命令的执行。在Swift中,函数式...

    Swift教程之函数详解

    Swift函数参数可以设置默认值,这意味着在调用函数时可以省略某些参数,如果它们的值与默认值相同。这减少了代码重复,提高了代码简洁性。 6、可变参数和不定数量的参数 函数还可以接受可变参数,即可以接受任意...

    Swift初学之函数参数类型

    最后,Swift函数支持函数类型作为参数,这意味着你可以将一个函数作为另一个函数的参数。这在处理高阶函数时非常有用,例如`map`、`filter`和`reduce`。函数类型由两个尖括号 `&lt;&gt;` 括起来,里面是返回类型和参数类型...

    swift4函数式编程学习

    Swift4函数式编程是苹果公司推出的Swift编程语言的第四版,它强调了代码的简洁、安全和可读性。在Swift4中,函数式编程是一种强大的编程范式,它允许开发者将程序视为一系列数据处理的函数,而不是状态的改变。这种...

    swift-BaseMath是Swift中float和double的基本数学函数

    3. **常见数学函数**:库中可能包括了常用的数学函数,如平方根、指数、对数、三角函数等,并且这些函数可能已经过优化,以提供比内置Swift函数更快的计算速度。 4. **精度控制**:在处理浮点数时,精度是一个重要...

    swift-函数式编程思想

    在Swift编程语言中,函数式编程思想是一种强大的编程范式,它强调将程序设计视为计算的数学函数,而不是状态变化或指令序列。这种思想源于数学中的λ演算,旨在提高代码的可读性、可维护性和可测试性。在本篇文章中...

Global site tag (gtag.js) - Google Analytics