可选的Swift要求普通变量只有一个状态和值。 即需要初始化,否则会报错:var Nora:int Nora = 10 print(Nora)//let num3:int//print(" \(num 3)")常量' num 3 '在初始化前使用。因为普通变量只有一种状态和限制,所以Swift设计了可选类型。 Type(可选)是一个枚举,有两种情况,None和Some(T),表示可能有也可能没有值。 Format:可选< Type >:或在类型后添加?数字 如下:varopa:可选 Swift中的Nil不是指针,是一个确定值,用来表示缺失的值。 任何类型的可选状态都可以设置为nil,不仅仅是对象类型 Nil不能用于非可选常量和变量。 如果您的代码中有需要求解缺失值的常量或变量,请将它们声明为相应的可选类型。 可选值:可选类型对应的值称为可选值。 Optionals值用选项修饰,有两种状态:1。有价值观;2.没有值,这意味着零。 //Valued var optValue1: Int?= 9//没有值var optValue3: Int?= nilvar optValue2: Int?//不提供初始值,其值默认为nil可选值。if语句可以用来判断var optValue1: Int?= 9var optValue4: Int?if optValue4!= nil { print(opt value 4 as any)} else {//opt value 1是可选变量。如果不解决,会有警告。//也可以这样解:print(optValue1!)print(optValue1 as Any) // output可选(9) 编译器会隐式强制将optional转换为as Any,不发出警告}强制解析:确认可选类型确实包含值后,可以添加感叹号(!)来获取值。 这个感叹号的意思是“我知道这是可选的,请使用它”。此时,编译器不会检查这个变量。 但如果可选变量中没有值,就会造成运行错误var optValue5: Int?= 10var result1: Int = optValue5!print(result 1)//output 10//error://var opt value 6:Int?//var result2: Int = optValue6!//print(result2)可选绑定:即,如果让 为了安全地解析可选类型的值,通常使用可选绑定。 如果optValue没有值,什么都不会做,花括号中的内容也不会执行。 如果opValue有值,optValue的值会赋给result3,执行花括号里的内容var optValue7: Int?op value 7 = 11 if let result3 = optValue7//不需要指定result 3的类型,类型与opt value 7一致{ print(result 3)//output 11 } Swift中的可选类型变量更接近OC中的常用变量。 //OC公共变量//ns data * data =[ns data . datawithcontsofmappedfile:@ "/users/hanjunqiang/desktop/study daily/H5/first-stage/novel . html "];//NSLog("%@ ",data);//Swift可选类型var数据:NSData?= ns data(content office:"/users/hanjunqiang/desktop/study daily/H5/first-stage/novel . html ")//demo网站,直接改成自己的路径地址文件//print (data as any) as,和Swift里一样!、as?三种运算符as由派生类转换为基类,分别是向上转换类Person {}//定义一个学生类class Student: Person {}//定义一个学生对象tomvar Tom = Student(" Tom ");//将学生对象转换成一般的人事对象,让person1 = tom作为Personas!它是向下转换,因为它是强制类型转换。如果转换失败,它将报告运行时运行错误。Let person: person =老师(“吉米·李”)Let Jimmy = person as!蒂奇勒斯?还有作为!运算符转换规则相同,但作为?如果转换不成功,将返回一个nil对象,如果成功,将返回一个可选的类型值。 因为as?转换失败时不会出现错误,可以像保证100%成功一样使用!否则,使用as?let person : Person =老师(“吉米·李”)如果让某人=人当?教师{ print("此人是教师,他的名字是\(someone.name)")} else {print("此人不是教师,并且' tom '的值为零")}