您的位置:首页 > 移动开发 > Swift

IOS(swift语言)第4天可选类型(?!)初始化

2016-07-28 15:50 302 查看
1、可选类型:概念当一个值可能存在也可能不存在的时候,就需要用到可选类型。比如定义一个person类它有电话,但是这样的属性有可能存在也可能不存在(有的人有电话有的人没有)我们可以不给可选类型赋初值。

1.1?修饰的可选类型

class person{
var tell:String?
}
var p = person()
print(p.tell)//打印初nil
p.tell = "123456789"
print(p.tell)//打印初Optional("123456789")
print(p.tell!)//打印值为123456789


可以看到,在上没没有给可选类型赋值的时候拿到的是nil,赋值过后打印的是Optional("123456789")。可以分析一下可选类型的取值过程。个人理解在内存上可选类型是这样初始化的:



那么我们怎么样才能够拿到它真正的数据呢?就是使用!来解包。因此第3个print打印的是123456789

需要注意的是在使用?修饰的可选类型使用!解包的时候必须要拿到数据,不然程序会崩溃

var a = p.tell!

当p.tell没被初始化的时候程序就崩溃了
1.2!修饰的可选类型。使用!修饰的可选类型是声明这个可选类型是隐式解包。这个可选类型中一定会有值。因此不在需要使用!进行强制解包拿取数据。

2、初始化:在创建实例对象的时候,类的所有属性都需要被初始化class person{
name:String
age:Int
init(name:String, age:Int){
self.name = name
self.age = age
}
}

一个类可以有多种初始化实例的方法。类似JAVA中多个方法拥有相同的方法名但是参数类型、个数不同。在写初始化方法的时候需要注意。如果一个类继承与其他类重写默认初始化方法(不用override修饰)需要先调用父类默认初始化方法,重写父类的构造初始化,先调用先子类,在调用父类的初始化方法。在写自身的。
class person{
var color:String
init(color:String){
self.color = color
}
}

//构造方法初始化,先子类在父类
class son1:person{
var name:String
init(color:String,name:String){
self.name = name
super.init(color:color)
}
}
//重写父类默认初始化方法先父类
class son2:person{
override init(color:String){
super.init(color:color)
self.color = color+"sss"
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: