首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Swift 5|如何向selector @objc传递附加参数

在Swift 5中,我们可以通过以下几种方式向selector @objc传递附加参数:

  1. Selector + 包装函数(Wrapper Function): 使用这种方式,我们可以创建一个包装函数,将需要传递的参数作为该函数的参数进行传递。然后,将包装函数作为selector传递给@objc修饰的方法。 例如:
  2. Selector + 包装函数(Wrapper Function): 使用这种方式,我们可以创建一个包装函数,将需要传递的参数作为该函数的参数进行传递。然后,将包装函数作为selector传递给@objc修饰的方法。 例如:
  3. 在这个例子中,我们创建了一个名为buttonTappedWrapper的包装函数,将button作为参数传递给了buttonTapped方法。
  4. ObjC方法调用: 如果你的项目中使用了Objective-C,你可以直接使用Objective-C的方法调用语法来传递附加参数。 例如:
  5. ObjC方法调用: 如果你的项目中使用了Objective-C,你可以直接使用Objective-C的方法调用语法来传递附加参数。 例如:
  6. 在这个例子中,我们通过withData参数传递了附加数据。
  7. 使用关联对象(Associated Objects): 关联对象允许我们将额外的对象与现有的类实例关联起来。我们可以使用Objective-C的运行时机制来实现这个目的,以便向selector传递附加参数。 例如:
  8. 使用关联对象(Associated Objects): 关联对象允许我们将额外的对象与现有的类实例关联起来。我们可以使用Objective-C的运行时机制来实现这个目的,以便向selector传递附加参数。 例如:
  9. 在这个例子中,我们使用关联对象将附加数据与UIButton实例关联起来,然后在按钮点击事件中可以通过additionalData属性获取到附加数据。

推荐的腾讯云相关产品和产品介绍链接地址:

  • 云服务器(CVM): https://cloud.tencent.com/product/cvm
  • 云函数(SCF): https://cloud.tencent.com/product/scf
  • 云数据库MySQL版(CDB): https://cloud.tencent.com/product/cdb_mysql
  • 云原生容器服务(TKE): https://cloud.tencent.com/product/tke
  • 人工智能平台(AI): https://cloud.tencent.com/product/ai
  • 物联网开发平台(IoT Explorer): https://cloud.tencent.com/product/iotexplorer
  • 移动推送服务(TPNS): https://cloud.tencent.com/product/tpns
  • 对象存储(COS): https://cloud.tencent.com/product/cos
  • 腾讯区块链服务(TCS): https://cloud.tencent.com/product/tcs
  • 腾讯元宇宙服务(Tencent Reality): https://cloud.tencent.com/product/taas
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • RxCocoa 源码解析——代理转发

    平常我们使用 RxSwift 的时候,一般不会去直接使用 delegate,譬如要处理 tableView 的点击事件,我们会这样:tableView.rx.itemSelected.subscribe(onNext: handleSelectedIndexPath),这跟先设置一个 delegate,然后在 delegate 的tableView(_:didSelectRowAt:)方法中调用handleSelectedIndexPath的效果是一样的。那这个过程到底是如何进行的呢?我们进入 RxCocoa 的 UITableView+Rx.swift 文件来一探究竟,这个文件中不仅有itemSelected,还有诸如itemDeselected、itemAccessoryButtonTapped、itemInserted、itemDeleted、itemMoved等等一系列对应 tableView delegate 的包装方法,本文就以itemSelected为例,其他的都是相同的原理。为便于理解,我会给源码加一点中文注释,:

    02

    使用Swift3开发了个macOS的程序可以检测出objc项目中无用方法,然后一键全部清理

    当项目越来越大,引入第三方库越来越多,上架的APP体积也会越来越大,对于用户来说体验必定是不好的。在清理资源,编译选项优化,清理无用类等完成后,能够做而且效果会比较明显的就只有清理无用函数了。现有一种方案是根据Linkmap文件取到objc的所有类方法和实例方法。再用工具逆向可执行文件里引用到的方法名,求个差集列出无用方法。这个方案有些比较麻烦的地方,因为检索出的无用方法没法确定能够直接删除,还需要挨个检索人工判断是否可以删除,这样每次要清理时都需要这样人工排查一遍是非常耗时耗力的。

    01

    iOS开发 面向切面编程之 Aspects 源码解析

    1、面向切面编程应用在统计上 业务逻辑和统计逻辑经常耦合在一起,一方面影响了正常的业务逻辑,同时也很容易搞乱打点逻辑,而且要查看打点情况的时候也很分散。在 web 编程时候,这种场景很早就有了很成熟的方案,也就是所谓的AOP 编程(面向切面编程),其原理也就是在不更改正常的业务处理流程的前提下,通过生成一个动态代理类,从而实现对目标对象嵌入附加的操作。在 iOS 中,要想实现相似的效果也很简单,利用 oc 的动态性,通过 swizzling method 改变目标函数的 selector 所指向的实现,然后在新的实现中实现附加的操作,完成之后再回到原来的处理逻辑。 开源框架Aspects是一个非常好的框架。Aspects

    03
    领券