• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >swift > Swift中动态调用实例方法介绍

Swift中动态调用实例方法介绍

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了swift信用证实例,swift开发实例,swift 实例,taylor swift动态图,taylor swift最新动态等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

在 Swift 中有一类很有意思的写法,可以让我们不直接使用实例来调用这个实例上的方法,而是通过类型取出这个类型的某个实例方法的签名,然后再通过传递实例来拿到实际需要调用的方法。比如我们有这样的定义:
class MyClass {
    func method(number: Int) -> Int {
        return number + 1
    }
}
</div>
想要调用 method 方法的话,最普通的使用方式是生成MyClass的实例,然后用.method来调用它:
let object = MyClass()
let result = object.method(1)

// result = 2
</div>
这就限定了我们只能够在编译的时候就决定object实例和对应的方法调用。其实我们还可以使用刚才说到的方法,将上面的例子改写为:
let f = MyClass.method
let object = MyClass()
let result = f(object)(1)
</div>
这种语法看起来会比较奇怪,但是实际上并不复杂。Swift中可以直接用 Type.instanceMethod的语法来生成一个可以柯里化的方法。如果我们观察 f 的类型 (Alt + 单击),可以知道它是:
f: MyClass -> (Int) -> Int
</div>
其实对于 Type.instanceMethod 这样的取值语句,实际上刚才
let f = MyClass.method
</div>
做的事情是类似于下面这样的字面量转换:
let f = { (obj: MyClass) in obj.method }
</div>
这下就不难理解为什么上面的调用方法可以成立了。

这种方法只适用于实例方法,对于属性的 getter或者setter 是不能用类似的写法的。另外,如果我们遇到有类型方法的名字冲突时:
class MyClass {
    func method(number: Int) -> Int {
        return number + 1
    }

    class func method(number: Int) -> Int {
        return number
    }
}
</div>
如果不加改动,MyClass.method 将取到的是类型方法,如果我们想要取实例方法的话,可以显式地加上类型声明加以区别。这种方式不仅在这里有效,在其他大多数名字有歧义的情况下,都能很好地解决问题:
let f1 = MyClass.method
// class func method 的版本

let f2: Int -> Int = MyClass.method
// 和 f1 相同

let f3: MyClass -> Int -> Int = MyClass.method
// func method 的柯里化版本
</div>

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Swift UILable 设置内边距实例代码
  • 实例讲解Swift中引用类型的ARC自动引用计数
  • Swift编程中的switch...case语句实例解析
  • Swift与C语言指针结合使用实例
  • Swift中动态调用实例方法介绍
  • Swift调用Objective-C编写的API实例

相关文章

  • 2017-05-28iOS开发中Swift 指纹验证功能模块实例代码
  • 2017-05-28Swift 3.0基础学习之闭包
  • 2017-05-28通过一个map替换字符串中指定的字符变量方法
  • 2017-05-28深入讲解Swift的内存管理
  • 2017-05-28Swift与C语言指针结合使用实例
  • 2017-05-28Swift图像处理之优化照片
  • 2017-05-28Swift中switch语句区间和元组模式匹配
  • 2017-05-28用Swift编写自动录音器
  • 2017-05-28实例讲解Swift中引用类型的ARC自动引用计数
  • 2017-05-28Swift面试题及答案整理

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 探讨Swift数组和字典
    • Swift教程之下标详解
    • Swift教程之闭包详解
    • 窥探Swift编程中的错误处理与异常抛出
    • Hibernate三种状态和Session常用的方法
    • 基于SSM框架之个人相册示例代码
    • Swift教程之方法详解
    • mac git xcrun error active developer path 错误
    • 详解Swift编程中的for循环的编写方法
    • 深入理解Swift中的访问控制关键字

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有