首页 > 代码库 > @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中,NSSelectorFromStringNSStringFromSelector仍然可用,代码如下所示:


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带给我们了更多的便利性。


总结一下相关的方法:

  1. @selector(func),用于Objc中,返回SEL
  2. Selector(“func name")用于Swift中,返回Selector类型,但这种用法没有必要,因为Swift具有自动类型推断的特性,在需要Selector类型参数的地方,传入String,String将自动被转换为Selector类型
  3. NSSelectorFromString,两者皆可用,返回SEL或Selector
  4. NSStringFromSelector,两者皆可用,返回NSString或者String
  5. NSStringFromClass,两者皆可用,返回返回NSString或者String
  6. NSClassFromString,两者皆可用,在Objc中返回Class,而在Swift中返回AnyClass。


学习Swift技术,加入Swift书友会QQ群:259152129,与作者一起学习讨论!

@selector() in Swift