美文网首页
Swift学习记录 Day 1

Swift学习记录 Day 1

作者: 那不是随你 | 来源:发表于2018-02-03 18:08 被阅读0次

    100 Days of Swift中学习,实践

        目前正在学习swift ,之前有一些好高骛远, 刚刚接触,并且了解了一部分语法后就因为自己在OC上使用reactiveOBJC还算熟练,想直接学会rxswift和reactiveswift ,中间因为xcode有时候索引失效和一些其他原因,想过放弃学习,无意中看到 关于iOS学习进阶的必读一些博客总结 这个文章时看到了 100 Days of Swift, 感觉从一次次项目中,更加能够坚实我的基础, 所以决定从基础开始,跟着一步步往前走

    第一天:

    用了20分钟把这个弄完, UI很容易, 但是Swift和OC太多不一样,还花了20分钟

    用到的知识点:

    1.手势:tap,longPress事件。

    2.KVO

    3.GCD   DispatchSourceTimer

            var codeTimer =DispatchSource.makeTimerSource(queue:DispatchQueue.global())

            codeTimer.schedule(deadline: .now(), repeating:0.05)

            codeTimer.setEventHandler {

                self.totalNum=self.totalNum+1

            }

     @objc fileprivate func LongPressAction(sender:UIGestureRecognizer){       

        if sender.state == .began{

                codeTimer.resume()  

            }

            else if sender.state == .ended         {

                codeTimer.suspend()        

            }             

    }

     deinit {

            self.removeObserver(self, forKeyPath: "myDate", context: nil)

            codeTimer.resume()

        }

    直接上代码了

    遇到的坑:

    1.添加Action 的时候,不了解Selector在Swift中使用,导致崩溃。

    #selectorSelector()区别

    #selector (self.funcName)       self 作用域 funcName 方法名。当前作用域只有唯一方法时 可以省略作用域

        #selector ()   能够代替字符串明确构造 Selector  直接索引出当前作用域的方法,不会出现[unrecognized selector sent to instance] 崩溃的bug ,更加安全 。但是在使用#selector()的时候, 如果方法是Swift的私有方法, 则需要赋予该方法  OC的runtime特性 在前面加入修饰词 @objc

    Selector()    

         填写字符串来搜索方法。可能会出现找不到方法而崩溃的问题, 书写效率也不够高效。但是在某些情况下能够起到作用。比如:父类有一个私有方法 show, 子类通过#selector 是无法调用父类中的show方法的, 但是Selector 可以通过 字符串匹配到方法,并且调用

    2.KVO

    oc:一般直接给观察的那个属性赋新值 就会触发

    这是因为 oc具有运行时机制,并且继承的NSObject类,而NSObject类实现了willChangeValueForKey、didChangeValueForKey能够在运行时派生一个子类正常执行。

    swift

    1,给属性前面加上 关键字 dynamic 

    2 ,使用setvalue for key 可以触发

    swift本身屏蔽了运行时机制,没有运行时就没有派生类。没有派生类,就没有重写set get方法。没有重写set方法 ,就没有调用类本身的 setvalue for key 来 触发kvo通知观察者。so 要么加上关键字 dynamic获取动态性、要么直接使用setvalue for key来触发kvo。

    还有就是在observeValue 方法中不会使用 [NSKeyValueChangeKey : Any] 。 

      if let value = change?[NSKeyValueChangeKey.newKey] as? Int {

                    DispatchQueue.main.async{

                         self.NumberLable.text="\(value)"

    }

    问题首先没有加入as?Int  然后断点打印的时候 po  change?[NSKeyValueChangeKey.newKey] 会报找不到description。


    相关文章

      网友评论

          本文标题:Swift学习记录 Day 1

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