/**
@H_502_11@可选值@H_502_11@: optionals
两种状态一种是有值,另一种是没有值nil
可选值可以用 if语句来进行判断的
*/
// 这个就是可选值,有值是整型9
let optionValue:Int? = 9
print(optionValue)
// Optional(9)
if optionValue !=nil
{
print(optionValue)
// Optional(9)
}
print("------------->>")
// @H_502_11@这里的!@H_502_11@表示对可选值的一个强制解析 (unwrapping@H_502_11@解包)
let sValue:Int = optionValue!
print(sValue)
// 9
// 没有值
let optionValue1:Int? =nil
if optionValue1 ==nil
{
print(optionValue)
print("------------->>")
// fatal error: unexpectedly found nil while unwrapping an Optional value
// 空的对象,不可以对它进行强制解析,加上叹号强制解包
// var sValue1: Int = optionValue1!
// print(sValue1)
// 可选绑定
ifvar sValue1 = optionValue1
{
print(sValue1)
}
/**
隐式解析可选类型,两种状态
@H_502_11@有值,没有值nil
*/
let imOptValue:Int! = 111
print("------------->>")
if imOptValue !=nil {
print(imOptValue)
}
print("iValue------------->>")
// 可选绑定
iflet iValue = imOptValue {
print(iValue)
}
print("iValue2------------->>")
// 这个地方我们定义了隐式可选类型后呢,不需要在强制解包(加叹号),
let iValue2:Int = imOptValue
print(iValue2)
/**
无论是普通的可选型,还是隐式的可选型,
对于一个没有值的进行解包都会引起一个运行时的错误
*/
/**
1.@H_502_11@常量和变量
Swift语言中是用let来定义常量,并且要初始化。var来定义变量,
在let或者var后面申明类型,冒号+空格,然后再加上类型名称。
2.optional(@H_502_11@可选)@H_502_11@变量
可选变量用于处理值缺失的情况,有点类似于OC中的nil,可以用于任何类型上,不仅仅是类,不过更加安全。Swift是类型安全的一门语言,可以很少申明类型。
@H_502_11@附:Swift@H_502_11@和Objective-C@H_502_11@中nil@H_502_11@的区别
1)OC中,nil是一个指向不存在对象的指针;
2)Swift中,nil不是指针,它是一个确定的值,用于表示值缺失。任何类型的可选状态都可以设置为nil,不只是对象类型;
3.@H_502_11@深入了解Optional@H_502_11@变量
Optional@H_502_11@其实就是一个enum@H_502_11@,里面有None@H_502_11@和Some@H_502_11@类型。nil@H_502_11@就是Optional.None@H_502_11@,非nil@H_502_11@就是Optional.Some@H_502_11@,通过Some(T)@H_502_11@包装原始值,所以在是用Optional@H_502_11@的时候要进行拆包。
@H_502_11@声明一个可选类型的时候要在类型后面加上?@H_502_11@如:var str : String?
var strValue@H_502_11@: String?
@H_502_11@意思不是“@H_502_11@我声明了一个Optional@H_502_11@的String@H_502_11@值”,@H_502_11@而是我声明了一个Optional@H_502_11@类型值。
对一个可选类型的值,需要进行拆包才不会报错。
拆包有两种方式,如下:
1@H_502_11@)Optional Binding
@H_502_11@如:
if let str = strValue
{
let hashValue = str.hashValue
}
*/