看一下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中,类函数(Class Functions)是一种特殊类型的方法,它们属于类本身而不是类的实例。这意味着类函数不需要任何实例就可以被调用,它们是静态绑定的,即在编译时就已经确定了调用的对象。接下来,我们将深入...
在介绍“函数式编程中的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
objc, objc.io 中国, 函数式 swift 王巍 喵神 onevcat swift4
在Swift编程语言中,函数是一种强大的工具,它们不仅可以执行特定任务,还可以被用作其他函数的输入或输出。本教程将深入探讨一个高级概念——如何将函数类型作为参数。这在编写高度可重用和模块化的代码时尤其有用...
在Swift编程语言中,函数是一种强大的工具,它们不仅可以执行特定任务,还可以被用作其他数据类型的替代品,比如常量和变量。本教程将深入探讨如何将函数类型作为常量和变量来使用,以增强代码的灵活性和复用性。 ...
2. Swift教程章节:从基础开始,包括基本运算符、字符串和字符处理、集合类型、控制流、函数、闭包、枚举、类和结构体、属性、方法、下标、继承、初始化、析构、自动引用计数(ARC)、可选链式调用等。 3. 语言参考...
Swift中的函数柯里化,是一种将多参数函数转化为一系列单参数函数的过程,使得函数可以逐步接收参数,并在所有参数提供完整之前返回一个新函数。这种技术源于数学家哈斯凯尔·伽罗瓦(Haskell Curry)的名字,因此被...
《函数式Swift》是面向Swift开发者的指南,旨在深入探索函数式编程(Functional Programming, FP)范式在Swift语言中的应用。Swift是苹果公司设计的一种强类型、安全和快速的编程语言,广泛用于iOS、macOS、watchOS...
《函数式Swift》是一本深度探讨Swift编程语言中函数式编程思想的书籍,特别强调了其在Swift 4版本中的应用。函数式编程是一种编程范式,它将计算视为函数的求值,而不是状态的改变或命令的执行。在Swift中,函数式...
Swift函数参数可以设置默认值,这意味着在调用函数时可以省略某些参数,如果它们的值与默认值相同。这减少了代码重复,提高了代码简洁性。 6、可变参数和不定数量的参数 函数还可以接受可变参数,即可以接受任意...
最后,Swift函数支持函数类型作为参数,这意味着你可以将一个函数作为另一个函数的参数。这在处理高阶函数时非常有用,例如`map`、`filter`和`reduce`。函数类型由两个尖括号 `<>` 括起来,里面是返回类型和参数类型...
Swift4函数式编程是苹果公司推出的Swift编程语言的第四版,它强调了代码的简洁、安全和可读性。在Swift4中,函数式编程是一种强大的编程范式,它允许开发者将程序视为一系列数据处理的函数,而不是状态的改变。这种...
3. **常见数学函数**:库中可能包括了常用的数学函数,如平方根、指数、对数、三角函数等,并且这些函数可能已经过优化,以提供比内置Swift函数更快的计算速度。 4. **精度控制**:在处理浮点数时,精度是一个重要...
在Swift编程语言中,函数式编程思想是一种强大的编程范式,它强调将程序设计视为计算的数学函数,而不是状态变化或指令序列。这种思想源于数学中的λ演算,旨在提高代码的可读性、可维护性和可测试性。在本篇文章中...