结构体的介绍
- 概念介绍
- 结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合
- 结构体是值类型
- 结构体既可以定义属性又可以定义方法
定义语法
struct 结构体名称 {
// 属性和方法
}
- 举例
struct Person {
var name = "Zhangsan"
var age = 10
var sex = "man"
func say(){
print("人会说话")
}
}
- 解读
- 定义了一个名叫 Person的结构体
- 这个结构体拥有两个存储属性 name、 age和 sex
- 这个结构体拥有一个方法say
结构体实例
- 实例化结构体最简单的是在结构体名字后面写上
()
,任何属性都被初始化为它们的默认值
var p1 = Person()
- 所有的结构体都有一个自动生成的
成员构造函数
来实例化结构体,可以使用它来初始化所有的成员属性
var p2= Person(name: "Lisi", age: 20, sex: "woman")
访问属性和方法
- 可以用
.
来访问一个结构体实例的属性和方法 - 访问时如果使用了赋值语句就是设置属性
//访问
p2.age
//设置
p2.age = 30
//通过.调用结构体中的属性和方法
p1.name
p1.age
p1.sex
p1.say()
结构体是值类型
- 值类型是一种当它被赋值给一个常量或者变量,或者被传递给函数时会被
拷贝
的类型 - Swift 中的结构体(包括枚举)是值类型,它在代码传递中总是会被拷贝
//值类型拷贝
var p3 = p2
//此时改变p3并不会改变p2的值
p3.name = "Wangwu"
p3.age = 30
p2.age //20
p2.name //Lisi
p3.age //30
p3.name //Wangwu
常用的结构体
- CGRect
/* Rectangles. */
public struct CGRect {
public var origin: CGPoint
public var size: CGSize
public init()
public init(origin: CGPoint, size: CGSize)
}
- CGSize
/* Sizes. */
public struct CGSize {
public var width: CGFloat
public var height: CGFloat
public init()
public init(width: CGFloat, height: CGFloat)
}
- CGPoint
/* Points. */
public struct CGPoint {
public var x: CGFloat
public var y: CGFloat
public init()
public init(x: CGFloat, y: CGFloat)
}
字符串,数组和字典的赋值与拷贝行为
Swift 中的 String , Array 和 Dictionary类型是作为结构体来实现的,这意味着String , Array 和 Dictionary在它们被赋值到一个新的常量或者变量,或它们本身被传递到一个函数或方法中的时候,其实是传递了拷贝。
OC中的 NSString, NSArray和 NSDictionary,它们是作为类来实现的,所以NSString , NSArray 和 NSDictionary实例总是作为一个引用而不是拷贝来赋值和传递。