首页 > 代码库 > @selector() in Swift
@selector() in Swift
1,在Objc中
在Objc中,可以使用@selector取得一个方法或函数的SEL类型,SEL类型即是作为参数在方法中传递的方法。
在Objc中,除了@selector,还有NSSelectorFromString可以取得SEL类型,与之对应的NSStringFromSelector函数是将SEL类型转换为字符串。
2,在Swift中
在Swift中,与SEL类型对应的是Selector类型。在Swift中,充许直接在需要Selector类型的地方传入一个方法或函数的String名称(完整名称),因为Selector具有这样一个指定构造器:
init(_ str: String)
而使这种自动转换可行。因为在构造参数str之前有下划线(_),所以在使用时不必传递str。
除此之外,在Swift中,NSSelectorFromString与NSStringFromSelector仍然可用,代码如下所示:
func f1(){
println("f1")
}
class c1 {
var var1 = "LY"
}
//NSSelectorFromString
let a = (Selector("f1"),NSSelectorFromString("f1"))
Selector("f1") == NSSelectorFromString("f1")//true
//NSStringFromSelector
let b = (String(_sel: a.0),NSStringFromSelector(a.0))
String(_sel: a.0) == NSStringFromSelector(a.0)//true
let d = NSStringFromClass(c1)
let c = NSClassFromString(d)
在Objc中可用的全局函数仍然可用,并且Swift带给我们了更多的便利性。
总结一下相关的方法:
- @selector(func),用于Objc中,返回SEL
- Selector(“func name")用于Swift中,返回Selector类型,但这种用法没有必要,因为Swift具有自动类型推断的特性,在需要Selector类型参数的地方,传入String,String将自动被转换为Selector类型
- NSSelectorFromString,两者皆可用,返回SEL或Selector
- NSStringFromSelector,两者皆可用,返回NSString或者String
- NSStringFromClass,两者皆可用,返回返回NSString或者String
- NSClassFromString,两者皆可用,在Objc中返回Class,而在Swift中返回AnyClass。
学习Swift技术,加入Swift书友会QQ群:259152129,与作者一起学习讨论!
@selector() in Swift