引子
之前我们在用Int,String等类型的时候,可能没有仔细研究过,其实这些基本类型与C或者Java不一样,不是严格的“基本类型”,他们其实是经过封装的结构体。
按住Alt键点击Int类型后,可以看到Int结构体的完整定义
/// A 64-bit signed integer value
/// type.
struct Int : SignedIntegerType {
var value: Builtin.Int64
/// A type that can represent the number of steps between pairs of
/// values.
typealias Distance = Int
/// Create an instance initialized to zero.
init()
init(_ v: Builtin.Word)
/// Create an instance initialized to `value`.
init(_ value: Int)
///以下代码省略
}
可以看到,结构体中的成员变量存储了Int类型的值,同时还提供了包括初始化方法之内的若干个方法。
Swift中的结构体并不复杂,与C语言的结构体相比,除了成员变量,还多了成员方法。使得它更加接近于一个类。个人认为这算是类的一个轻量化实现。下面我通过自己实现一个结构体来加深对其的理解。
定义结构体
struct Person {
var name:String
var age:Int
func introduce(){
println("我叫:\(name),今年\(age)岁")
}
}
语法与C语言或者OC类似,函数会在之后介绍。不过需要注意的是,Swift中的结构体,在定义成员变量时一定要注明类型。
结构体的使用
定义完结构体之后就可以创建一个Person结构体类型的变量了。
var person = Person(unknown: "kt",age: 20)
这里的Person(name:age:)方法是结构体根据其成员变量默认生成的构造方法。当然我们也可以自定义它的构造方法。
创建结构体变量后,就可以访问或修改结构体的成员变量或调用在结构体里面定义的成员方法。
person.name = "kt"
println("person.name = \(person.name)") person.introduce()
运行结果:
person.name = kt 我叫:kt,今年20岁
另外要注意一下的是,结构体属于值类型,而Swift中的类属于引用类型。他们在内存管理方面会有不同。
附录
查看完整专栏——《Swift轻松入门》
【Swift入门(一)——基本语法】
【Swift入门(二)——字符与字符串】
【Swift入门(三)——元组(Tuple)】
【Swift入门(四)——可选类型(Optionals)与断言(Assert)】
【Swift入门(五)——数组(Array)】
【Swift入门(六)——字典(Dictionary)】
【Swift入门(七)——结构体(Struct)】
【Swift入门(八)——功能强大的求余运算符】
【Swift入门(九)——String与Int、Double、Float等数字相互转换】
【Swift入门(十)——循环引用、弱引用和无主引用】
【Swift入门(十一)——类型转换与is、as操作】
【Swift入门(十二)——利用Extension添加逆序输出字符串方法】