- 在 swift 中'?'相当于可选类型, optional;
- '?'的使用场景:当我们声明变量的时候,且又不想为变量赋初值;
- 在 swift 打印的结构中, nil 实际上就是一个枚举值
- 可选类型 optional 实际上是一个枚举类型,给枚举类型中有两个枚举值: none 和 some; 如果为 none 时,就说明未赋初值(该变量中目前无值),some 说明该变量已经进行了初始化赋值.
- '?',其实是可选类型的语法糖形式, var optional<Int>等同于 var a:optional<Int>
var a:Int? = 9
print(a) //结果为 optional(9)
- 如果我们将一个变量声明为可选类型,实际上是给变量目前就是一个枚举值:当我们在使用的时候,希望使用的就是我们声明的类型,例如在该处的 Int 类型;这个时候我们就需要解包' ! ',将枚举类型转换我们所期望的类型
- 这个转换实际上就是类型与类型之间的转换,在强制解包的时候,我们要保证变量有值,也就是保证变量为 optional.some;
print(a!)// 所得到的结果就为9
- 注意
- 当我们为可选类型赋值之后,就等同于: optional.some = 初值;那么打印出来的形式为 optional(初值).
- 相反我们在打印的时候,进行解包' ! ' => 本质上就是取出 optional.some 中的值,打印出来的形式 ----初值----
//当 a 为 nil 的时候,我们要强制解包的话会导致崩溃,所以我们在 输出值的时候,要先进行判断,在此要注意:解包之前的判断,只是为了确定变量有值
var a_1:Int? = 0
if a_1 != nil {
print(a_1! + 1)
}else{
print("未赋初值")
}
//可选绑定,用来判断 b 是否为 nil
如果 a_1等于 nil 的时候,赋值操作失败,如果a_1 != nil, 实际上是讲 a_1! 赋值给 b, 赋值操作成功.
if var b = a_1 {
print("b=",b)
}else{
print("未赋初值--")
}
' ? ' 和' ! '的用法在系统的类型的对象中使用比较频繁
2.结构体
struct Point {
var _x:Float = 0.0
var _y:Float = 0.0
//CGPointMake(x:y:)
//为结构体增加一个成员方法,类似于 OC 中的实例方法----减号方法
//用 mutating 来修饰成员的方法的作用为:可以在成员方法中修改结构体的成变量的值
mutating func pointMake(x:Float,y:Float) {
_x = x
_y = y
}
//在结构体中,声明的方法如果未加 static 修饰词,该方法就是成员方法(-号方法),如果是有 static 修饰,就是类方法(静态方法)===加好方法
//在任何计算机语言中,类方法中不能使用属性或者是实例变量.因为在执行该方法的时候,不能确定当前类是否被初始化.
//在加好方法中,不能使用属性,成员变量,减号方法
static func jiaHaoMethod() {
print("这是类方法")
// pointMake(&<#T##Point#>)
}
//作用域的范围
// public //公众的.将方法声明在. h 中.
// private //私用.讲方法声明在.m 中
// protected //受保护的.子类可以继承该方法.外部无法调用,
}
//Point() == alloc init
//初始化一个结构体类型
var mypoint = Point()
//当结构体中有成员变量的时候,系统也提供了有参数的初始化方式.
var mypoint_1 = Point(_x: 10.0, _y: 20.0)
//使用结构体中的成员变量
//print("mypoint_1.x",mypoint_1.x,"mypoint_1.y",mypoint_1.y)
//var p = mypoint_1;
//p.x = 20.0
//print("p.x",p.x,"mypoint_1",mypoint_1.x)
//为结构体的成员变量赋值
//mypoint_1.x = 20.0
//使用结构体中的成员方法(对象方法)
Point.jiaHaoMethod()
var mypo = Point()
mypo.pointMake(10.0, y: 20.1)
print(mypo)
//静态方法就是类方法.结构体的类方法要用类名来调用.
Point.jiaHaoMethod()
//模仿OC写一个frame,包含了 original 和 size 两个结构体对象, rectmake