• 语法补充


    /*

     断言: 当程序发生异常时, 如果希望找到出错位置并打印一个消息, 就可以使用断言, 即通过一个全局的函数 assert

     assert 接受一个闭包作为其第一个参数, 第二个参数是一个字符串; 假如第一个闭包返回的是一个false, 那么这个字符串就会被打印到中控制台上, assert格式如下:

     */

    //assert(()-> Bool, "Message")

    // 如示例, 我们希望某个函数不为空, 如果为空则会使程序崩溃, 这时就可以使用assert, 当这个函数为空的时候, 会把后面的字符串打印到中控台, 这样就知道哪里出现问题了:

    //assert(someFunction() != nil, "someFunction 返回了空值! ")

    /*

     precondition: 它和 assert 的格式类型, 也是动态的, 它会造成程序的提前终止并抛出错误信息; 前面讲过, Swift 数组的下标操作可能造成越界, 使用扩展的方式向其中怎敢爱一个方法来判断下标是否越界:

     */

    extension Array {

        func ifOutBounds(index:Int){

            precondition((0..<endIndex).contains(index), "数组越界")

            print("继续执行")

        }

    }

    [1,2,3].ifOutBounds(index: 2) // index == 3 会被提前终止

    //最后要注意: precondition 在一般代码中并不多见, 因为它是动态的, 只会在程序运行时进行检查; 适用于那些无法在编译器确定的风险情况;

    /*

     Swift4KVC和KVO语法 需要在xcode9 iOS11运行

     */

    /*

     struct 也支持 KVC

     */

    struct ValueType {

        var name:String

    }

    var object = ValueType(name: "小韩哥")

    let name =  ValueType.name

    //set

    object[keyPath: name] = "Swift4"

    //get

    let valueOfName = object[keyPath:name]

     // 

    /*

     KVO: 目前依然只有 NSObject 才支持KVO

     http://www.cocoachina.com/ios/20170712/19830.html

     */

    //注意:被观察的属性需要用dynamic修饰,否则也无法观察到。

    //一个好消息是不需要在对象被回收时手动 remove observer。但是这也带来了另外一个容易被忽略的事情:观察的闭包没有被强引用,需要我们自己添加引用,否则当前函数离开后这个观察闭包就会被回收了。

    class OCClass: NSObject {

        dynamic var name:String

        init(name : String) {

            self.name = name

        }

    }

    func TestKVO() {

        var swiftClass : OCClass!

        var ob: NSKeyValueObservation!

        

        swiftClass = OCClass(name: "OC")

        ob = swiftClass.observe(.name){

            (ob, changed) in

            let

             new = ob.name

            print(new)

        }

        swiftClass.name = "Swift4"

    }

    TestKVO()

  • 相关阅读:
    python 类 专有方法
    当请求进入Nginx后,每个HTTP执行阶段的作用
    jquery 监听不起效果的小问题汇总
    shell 脚本中 while 只执行一次
    LVS (Linux虚拟服务器)模型及算法
    TCP 通信时序及状态变迁
    Golang 谷歌搜索api 实现搜索引擎(前端 bootstrap + jquery)
    Golang 简单 http 代理转发
    Golang 简单静态web服务器
    Golang TCP转发到指定地址
  • 原文地址:https://www.cnblogs.com/lurenq/p/7364491.html
Copyright © 2020-2023  润新知