三.类和结构体
1. Swift的类和结构体高度相似,无论在定义语法上还是在用法上。
2.结构体和类的主要区别是:
(1)结构体不支持继承(自然也就不支持类型转换了)
(2)结构体不支持定义析构器
(3)结构体是值类型,而类是引用类型
3.与Objective-C中定义一个类时需要定义接口部分和实现部分的繁琐方式不同,Swift中定义类,结构体都只要定义一个文件即可,系统将会自动生成面向其他代码的外部接口。
4.定义结构体和类的语法:
[修饰符] class类名(或者struct结构体名)
{
零到多个构造器...
零到多个属性...
零到多个方法...
零到多个下标...
}
5.对于类来说,修饰符可以是:private,internal,public,final。对于结构体来说,修饰符可以是:private,internal,public,但不可能是final,因为结构体不支持继承。
6.对于类来说,class修饰的成员(类成员)不能访问没有class修饰的成员(实例成员)----相当于java中的static关键字。而Swift中的static则用来修改结构体、枚举中的属性,表示该变量是结构体、枚举的成员。----总结来说就是:如果要实现像Java中的static关键字一样的功能,在Swift的类中用class修饰,在结构体、枚举中用static修饰。
7.对于Swift中类的以下几点,同Java是相同的:
(1)属性用于定义类或该类实例所包含的状态数据;
(2)方法用于定义类或该类实例的行为特征或功能;
(3)构造器用于构造该类的实例;
(4)如果没有定义构造器,默认提供了一个无参的构造器,一旦提供类构造器,系统就不会提供无参的构造器了;——跟Java中相同
(5)Swift通过类名后添加圆括号来表示调用构造器,从而返回类的实例。
8.对于结构体来说,如果程序没有为结构体提供构造器,系统则会为结构体提供两个构造器:一个无参的构造器,一个初始化了所有存储属性的构造器。
9.对于类来说,如果程序自定义的构造器和系统提供的构造器同时存在,则不能直接在类中定义构造器,可以通过扩展来为类添加构造器----对于结构体同样适用。
10. Swift的属性分为两种:存储属性和计算属性,其中存储属性类似于Java中的类成员变量。用于保存类型本身或实例的状态数据,是需要内存来存储的,创建类的实例的同时会被创建;计算属性则类似于Java语言的setter、getter方法合成的property,计算属性底层并一定保存状态数据。
11.定义存储属性的语法格式为:[修饰符] var|let存储属性名:类型名字[=初始值]
12.定义构造器的语法:
[修饰符] init (形参列表)
{
零到多条执行语句。。。
}
不像Java中,构造器的名字是类名,Swift中的构造器总是init。并构造器不能声明返回值类型。举个栗子:
class Person
{
//下面定义了两个存储属性
var name : String = ""
var age : Int = 0
//下面定义了一个方法
func say(content : String)
{
print(content)
}
}
13.定义一个Person类型的变量:var p : Person
14.实例化:p = Person()//调用了系统提供的无参的构造器----不像java,这里不用new关键字
15.使用实例:p.name = "小明"
p.say("第一次使用Person类")
16.对于结构体,跟类很相似,举个栗子:
struct Dog
{
var name : String;
var age : Int
func run()
{
print("\(name) is running quckly")
}
}
var dog = Dog(name : "旺财", age : 4)
dog.run();
可见,结构体的实例化和调用方法和类很像。
网友评论