結構體的介紹
- 概念介紹
- 結構體(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執行個體總是作為一個引用而不是拷貝來指派和傳遞。