Swift隐式解析,可选,断言

来源:互联网 发布:如何上google 知乎 编辑:程序博客网 时间:2024/06/08 11:43

// Swift 可选

/**

 注意:C Objective-C中并没有可选这个概念。最接近的是 Objective-C中的一个特性,一个方法要不返回一个对象要不返回nilnil表示缺少一个合法的对象。然而,这只对对象起作用——对于结构体,基本的 C 类型或者枚举类型不起作用。对于这些类型,Objective-C方法一般会返回一个特殊值(比如NSNotFound)来暗示值缺失。这种方法假设方法的调用者知道并记得对特殊值进行判断。然而,Swift的可选可以让你暗示任意类型的值缺失,并不需要一个特殊值。

 */

// 例子

//使用可选(optionals)来处理值可能缺失的情况

let abc = "123"//申明一个字符串abc其值为"123"


let xyz = Int(abc)//转成int若可转成功Optional(123)否为nil

//返回的是一个可选的值

print(xyz)


if (xyz !=nil){

    print("\(abc) has an integer value of \(xyz!) ")


}

//当确定某个可选的确切有值的时候,可以用 ""来强制解析他。

//类型标注


var ser :Int? =404

ser = nil


//类型标注

var www :String?// www 就是nil

/**

 Swift nil Objective-C中的nil并不一样。在 Objective-C中,nil是一个指向不存在对象的指针。在 Swift中,nil不是指针——它是一个确定的值,用来表示值缺失。任何类型的可选都可以被设置为nil,不只是对象类型。

 **/

/*

一个隐式解析可选其实就是一个普通的可选,但是可以被当做非可选来使用,并不需要每次都使用解析来获取可选值。下面的例子展示了可选String和隐式解析可选String之间的区别:

纯文本复制*/

let possibleString: String? ="An optional string."

print(possibleString!)// 需要惊叹号来获取值

// 输出 "An optional string."

let assumedString:String! = "An implicitly unwrapped optional string."

print(assumedString)// 不需要感叹号

// 输出 "An implicitly unwrapped optional string."


//断言判断一个条件是否为真


//你可以使用全局assert函数来写一个断言。向assert函数传入一个结果为true或者false的表达式以及一条信息,当表达式为false的时候这条信息会被显示:

let age = -3

assert(age >=0, "a person's old cannot be less than zero")

//如果 age >=0不会出错。但是 <0断言被立即触发执行不下去.

//何时使用断言

//

//当条件可能为假时使用断言,但是最终一定要保证条件为真,这样你的代码才能继续运行。断言的适用情景:

//整数的附属脚本索引被传入一个自定义附属脚本实现,但是下标索引值可能太小或者太大。

//需要给函数传入一个值,但是非法的值可能导致函数不能正常执行。

//一个可选值现在是nil,但是后面的代码运行需要一个非nil值。

0 0
原创粉丝点击