Swift补基础之Selector、条件编译、编译标记、NSObject

在swift中使用条件编译比较直接
#if <condition>

#elseif <condition>

#else #endif

例如 :在debug模式和release模式编译不同代码

#if DEBUG

#else

#endif

在swift中判断iOS版本是否可用 更简单啦

//#available(iOS 8, *)
//数字随便改啦
if  #available(iOS 9.0, *) { //如果是9.0 或者以上 }else{ }
编辑标记

在swift中支持几种编译标记

   //FIXME: 请修正此方法
    private func x1() { print("x1") } //MARK: -这个是正确的 @objc private func x2() { print("x2") } //TODO: - 以后要做的先标记 func todoMethod(){ }

加了这种标记后 找起来就方便多了


编译标记
Selector

Selector可以将一个方法转换并赋值给一个 SEL
类型,它的表现很类似一个动态的函数指针。在 objc 时 selector 非常常用,从设定 target-action,到自举询问是否响应某个方法,再到指定接受通知时需要调用的方法等等,都是由 selector 来负责的。

下面看看Selector基本用法

    func x(){
        print("x") } func y(n:NSNumber){ //(一个小坑)这里不能用基础类型 int float之类的 不是AnyObject print("y = \(n)") } //MARK: - 测试z方法 func z(n:NSNumber,m:NSNumber){ print("z = \(n) , \(m)") } //FIXME: 请修正此方法 private func x1() { print("x1") } //MARK: -这个是正确的 @objc private func x2() { print("x2") }

这里搞了几个方法,看看怎么用

        let sel = NSSelectorFromString("x")
        let meth1 = Selector("x")
        let meth2 = Selector("y:") //一个参数 let meth3 = Selector("z:m:") //多个参数 // selector 其实是 objc runtime 的概念,如果这个你的 selector 对应的方法只在 Swift 中可见的话 (也就是说它是一个 Swift 中的 private 方法),在调用这个 selector 时你会遇到一个 unrecognized selector 错误: //所以要在private方法前面加@objc let meth4 = Selector("x2")

两种方式 都是可以的

你有很多种调用的方式 看需求了

        self.performSelector(meth1)
        self.performSelector(meth2,withObject: 2) self.performSelector(meth3,withObject: 2,withObject: 12) self.performSelector(meth4) NSThread.detachNewThreadSelector(meth2, toTarget: self, withObject: 3333) if self.respondsToSelector(sel){ self.performSelector(sel) } self.performSelector(meth2, withObject: 24, afterDelay: 2)//延时执行
NSObject

在swift中大多数类都继承自NSObject 看下有哪些基础操作

下面的测试都是在ViewController的viewDidLoad方法中测试的,可以直接无痛看注释

        print(self.isKindOfClass(NSObject))  //true    测试一个接收器是否是一个指定类的实例
        print(self.isMemberOfClass(NSObject)) //false 从属关系 print(self.isMemberOfClass(ViewController)) // true print(self.respondsToSelector(sel)) //true 是否实现了一个指定的方法 print(self.conformsToProtocol(UITableViewDelegate)) //false 是否实现了某个协议 print(self.isEqual(ViewController())) //false 对象比较 print(self.description) //<DynimicTest.ViewController: 0x7fac48c377b0> 允许一个对象返回一个字符串来描述它的内容



文/大石头布(简书作者)
原文链接:http://www.jianshu.com/p/042fa8348c14
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

转载于:https://www.cnblogs.com/Free-Thinker/p/5355718.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值