swift - 为什么没有 Swift 等价于向 View 添加操作?

标签 swift

环顾 Stack Overflow,您会发现许多关于如何向按钮添加操作、向 View 添加操作等的资源。这些资源中的每一个都使用@objc,因为#selectorsobjc 代码。但是,我找不到任何资源可以在不使用 objc 的情况下向 View 添加操作。 将某些东西标记为 objc 会将其暴露给 Objective-C 运行时,这在使用选择器时是必需的。

本质上,它归结为这些问题:

  • 是否可以在不使用@objc 代码的情况下创建 Action ?
    • 如果是这样,为什么有这么多资源使用 @objc 代码来执行操作?
  • 如果不可能,为什么还没有采取任何措施?
    • 为什么我们已经达到了 Swift 版本 4,却没有用于向 View 添加操作的 Swift 等价物?
    • 将来是否会有更新来实现 Swift 变体以向 View 添加操作?

最佳答案

目标/选择器机制是很久以前在 Objective-C 中编写 UIControl(和类似类)的方式,甚至在 Objective-C block 出现之前。

你的问题对 Objective-C 来说同样有效。为什么 UIControl(和类似的)不提供基于 block 的 API 而不是过时的目标/选择器模式?

所以这不是更新 Swift 的问题。这是一个向使用目标/选择器模式的相关类添加基于 block /闭包的 API 的问题。

如果您在 GitHub 上稍作搜索,您会发现一个基于闭包的 Swift API,它实际上可以满足您的需求。当然,它的实现是使用旧的目标/选择器 API。

关于swift - 为什么没有 Swift 等价于向 View 添加操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51005654/

相关文章:

ios - UIView 之上的 AVPlayer

xcode - 将我的 MVC 模型部分从数组转换为字典

ios - 将事件门票添加到 Apple 钱包?

ios - 场景套件渲染器访问错误导致崩溃

arrays - Swift 从数组返回字符串

ios - 在 Swift 中打开我的 iOS 应用程序的文档目录

ios - Scenekit - 物理世界设置以防止运动学节点相交

ios - 基于设备的字体类型和颜色

xcode - 使用 Swift Package Manager 时如何生成用于开发的 Xcode 项目文件

swift - 每月重置一个值 - swift 和 firebase