美文网首页Swift学习iOS开发
IOS&swift中#selector的怪异语法

IOS&swift中#selector的怪异语法

作者: Lebus | 来源:发表于2018-10-02 23:05 被阅读380次

#selector()里面的参数是需要调用的方法名。

在Swift中,#selector常用于TimerUIBarButtonItem等类中的target/action方法中。例如,当您创建计时器时,您需要告诉它在计时器触发时通知谁(target)以及应该调用哪个#selector(action)。对于bar button items也是如此:当按下按钮时,应该调用哪个选择器,以及在什么对象上?

在Swift 2.2之前,#selector的参数用的是字符串Selector(“buttonTapped:”),这种语法容易出现很多错别字。Swift 3提供了#selector一种安全的语法。

Swift的#selector与Objective-C的@selector 一样。Objective-C的选择器语法非常简单 - @selector(methodName:arguments:)。Swift有点复杂。

Swift有函数重载overload(同名,不同参数)的概念,而Objective-C没有。您可能需要消除#selector引用哪个函数的歧义。

这是一个重载doStuff方法:

class Thing {    
...    
func doStuff(stuff: Int) {       
 print("do Stuff \(stuff)")    
}    
func doStuff(stuff: Double, fluffy: String) {        
print("do Stuff \(stuff) - \(fluffy)")    
}

当您直接调用doStuff时,Swift可以根据您传递的参数确定要使用哪一个。但用#selector调用的话无法知道参数的类型。如果您尝试为其创建选择器doStuff,则会出现模糊使用的error

解决方法是加入参数标签:

#selector(Thing.doStuff(stuff:fluffy:)))

这时候调用的就是第二个方法。

相关文章

  • IOS&swift中#selector的怪异语法

    #selector()里面的参数是需要调用的方法名。 在Swift中,#selector常用于Timer和UIBa...

  • 关于一些runtime相关术语的数据结构

    SEL 它是selector在 Objc 中的表示(Swift 中是 Selector 类)。selector 是...

  • switf小笔记

    不怎么写swift记录一下先 Swift:Selector 语法糖 引用自 https://developer.5...

  • Swift语法糖的使用

    Swift语法糖的使用 语法糖的简介 语法糖Selector例子 语法糖的简介 我个人对语法糖的理解就是让你的代码...

  • Swift语法糖的使用

    Swift语法糖的使用 这个是哪里看的忘记了,反正内容不是我写的 语法糖的简介 语法糖Selector例子 语法糖...

  • 优雅地使用 Selector - Swift

    〇. 不够优雅的 #selector Swift 中的 Selector 就是 Objective-C 中的 SE...

  • Swift:Selector 语法糖

    作者:Andyy Hope,原文链接,原文日期:2016-03-23译者:saitjr;校对:numbbbbb;定...

  • Runtime快捷笔记

    方便自己查找 SEL 它是selector在 Objc 中的表示(Swift 中是 Selector 类)。sel...

  • swift Selector事件

    最近处理点击事件,感觉不是很理想,繁碎; 看了swift Selector语法糖,使用extension来处理点击...

  • Swift中的selector

    最近在看《Swifter - 100 个 Swift 必备 tips》这本书。这里记录一些思考?。首先一个就是第一...

网友评论

    本文标题:IOS&swift中#selector的怪异语法

    本文链接:https://www.haomeiwen.com/subject/trnaoftx.html