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