声 明
本教程仅用于初学SWIFT同学使用,内容由本人(孤狼)学习过程中笔记编写,本教程使用SWIFT版本为2.0。本教程内容可以自由转载,但必须同时附带本声明,或注明出处。PAEA.CN版权所有。
Hello,欢迎回到和屌丝一起学SWIFT系列教程中来,上节我们说了枚举,不知道大家有没有学会呢?这节我们来一起学习一个新的很重要的东西-类和结构体.这节很重要,因为你以后会经常用到这些.
类和结构体
[定义类或结构体]
定义一个类或一个结构体,我们分别使用关键字class和struct,并在一个大括号里定义具体的内容.
class Ren{
var sex=""; //空字符串属性
var height = 0; //Int类型
var phoneCode="";
var home:String?,name:String?; //连续设置可选为空String属性
}
struct Gou{
var color:String?;
var size = 0
}
TIP:定义一个类或一个结构体,其实都是新增一个SWIFT的类型,所以为了统一方便,我们都是用UpperCamelCase方式来书写类或结构体的名称(大写首字母及关键字首字母),如Ren.而他们的属性及内部方法的名称我们则采用统一的lowerCamelCase方法来书写(小写首字母,大写关键字首字母),如phoneCode.
[定义一个实例]
我们如果想要使用一个类或结构体,我们需要把他们变成一个可用的实例.
var nanRen=Ren();
let xiaoGou = Gou();
[属性定义]
如何改变一个实例的属性值,有两种办法,一个是在定义实例的时候赋值(仅结构体支持),另一个是直接给一个实例赋值.
let daGou = Gou(color:"白",size: 123);
let nvRen=Ren();
nvRen.sex="女";
[属性访问]
访问你个属性很容易,这和其他语言没有差距,都是使用 实例.属性 的格式访问.
let huangGou = Gou(color:"黄",size: 123);
print(huangGou.color);
//输出"黄"
[结构体类型]
表面上结构体和类很像,但是结构体却是一个值类型,可以赋值使用.
struct A{
var str:String?;
}
var a=A(str:"a");
print(a.str); //输出"a"
var b=a;
print(b.str); //输出"a"
b.str="b";
print(a.str); //输出"a"
print(b.str); //输出"b"
这里我们可以看出,实例a和实例b是两个完全不一样的实例.
[类的类型]
类的类型是引用类型.所以只是传递引用,还是同一个实例
class B{
var str:String?;
}
var b1=B();
b1.str="我是字符B";
print(b1.str); //输出"我是字符B"
var b2=b1;
print(b2.str); //输出"我是字符B"
b2.str="我是b2字符B";
print(b1.str); //输出"我是b2字符B"
print(b2.str); //输出"我是b2字符B"
[何时使用类或结构体]
类和结构体不同,他们一个是值类型,一个是引用类型,所以在使用的时候也是不同的.那么何时使用类,何时使用结构体呢.
当该数据结构的主要目的是用来封装少量相关简单数据值。
当有理由预计该数据结构的实例在被赋值或传递时,封装的数据将会被拷贝而不是被引用。
当该数据结构中储存的值类型属性,也应该被拷贝,而不是被引用。
当该数据结构不需要去继承另一个既有类型的属性或者行为。
如果符合以上条件,那么就是使用结构体.其他的用类.