当前位置: 首页 > 知识库问答 >
问题:

使用#Selector而不是显式构造选择器[duplicate]

齐航
2023-03-14

在下面的片段中,Xcode推荐“使用#selector而不是显式构造一个选择器”的原因是什么?

// addButton = UIBarButtonItem.init(barButtonSystemItem: UIBarButtonSystemItem.Add, 
//             target: self, action: #selector(FoldersMaintenanceVC.addButtonPressed))
addButton = UIBarButtonItem.init(barButtonSystemItem: UIBarButtonSystemItem.Add, 
            target: self, action: Selector("addButtonPressed"))

self.navigationItem.leftBarButtonItem = addButton

func addButtonPressed()
{
    myNslogSys2(self, funcName:#function)
}

共有3个答案

吴唯
2023-03-14

发生这种情况的原因是现在不推荐使用string字面构造选择器,并将在Swift3.0中删除

随着#selector语法的引入,我们应该不推荐使用字符串文字来形成选择器。理想情况下,我们可以在Swift2.2中执行弃用,并从Swift3中完全删除语法。

您可以在https://github.com/apple/swift-evolution/blob/master/proposals/0022-objc-selectors.md中了解更多有关此更改的详细信息

鞠乐
2023-03-14

使用#selector现在是Swift中引用选择器的正确方法。不推荐使用结构选择器和字符串文字作为选择器,如“mysel:”

新的#selector现在是类型安全的,允许编译器检查和自动完成您传入的选择器。这修复了一个非常常见的错误,即选择器中的拼写错误(在字符串文本的情况下)

子车修平
2023-03-14

它建议您使用Swift2.2新的#selector,因为它的类型安全性更高,因为您不能对不存在的方法进行选择器引用,而使用选择器(String)则可以引用不存在的方法。

 类似资料:
  • Selector是Java NIO中的一个组件,用于检查一个或多个NIO Channel的状态是否处于可读、可写。如此可以实现单线程管理多个channels,也就是可以管理多个网络链接。 为什么使用Selector(Why Use a Selector?) 用单线程处理多个channels的好处是我需要更少的线程来处理channel。实际上,你甚至可以用一个线程来处理所有的channels。从操作

  • 对用爬取信息的解析,我们在之前已经介绍了正则re、Xpath、Beautiful Soup和PyQuery。 而Scrapy还给我们提供自己的数据解析方法,即Selector(选择器)。 Selector(选择器)是基于lxml来构建的,支持XPath、CSS选择器以及正则表达式,功能全面,解析速度和准确度非常高。 3.1 直接使用: Selector(选择器)是一个可以独立使用模块。 直接导入模

  • 主要内容:1 为什么要使用选择器?,2 创建一个选择器,3 向选择器注册频道,4 选择键,5 通过选择器选择频道,6 wakeup()方法,7 close()方法,8 完整的选择器示例Java NIO的选择器(Selector)是一个组件,可以选择一个或多个通道(Channel) 实例,并确定准备好进行读取或写入的通道。这样,单个线程可以管理多个通道(Channel),从而可以管理多个网络连接。 1 为什么要使用选择器? 仅使用单个线程来处理多个通道的优点是您需要更少的线程来处理通道。实际上,您

  • 我正在使用RaphaelJs的mousedown()方法。问题是,我想在div上应用mousedown(),而div是用jQuery的$(id)选择器选择的。我想为此使用香草Js,因为出于一些性能原因,我不想使用Jquery。(请参阅JsFiddle上的代码)。 我尝试了document.getElementById()方法,但它返回的对象与RaphaelJS的mousedown()方法不兼容 谁

  • 在使用来自Java背景的Swift时,为什么要选择结构而不是类呢?似乎它们是一样的,结构提供的功能较少。那为什么选择它呢?

  • 我正在写一段代码来登录Gmail。在密码页面上,我不是使用隐式等待,而是想改用显式等待。然而,它不是拿起我的选择器? 我得到了一个错误: (节点:14428)UnhandledPromiseRejectionWarning:错误:processTicksAndRejections(internal/process/next_tick.js:81:5)处的elementHandle._clickab