专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > Swift

语法补给

发布时间:2011-06-30 07:16:37 文章来源:www.iduyao.cn 采编人员:星星草
语法补充

/*

 断言: 当程序发生异常时, 如果希望找到出错位置并打印一个消息, 就可以使用断言, 即通过一个全局的函数 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()

友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: