類
在 Swift 中類是建立靈活的構建塊。類似于常量,變量和函數,用戶可以定義的類的屬性和方法。Swift給我們提供了聲明類,而無需用戶創建接口和實現文件的功能。Swift 允許我們創建類作為單個文件和外部接口,將默認在類一次初始化來創建。
使用類的好處:
- 繼承獲得一個類的屬性到其他類
- 類型轉換使用戶能夠在運行時檢查類的類型
- 初始化器需要處理釋放內存資源
- 引用計數允許類實例有一個以上的參考
類和結構的共同特征:
- 屬性被定義為存儲值
- 下標被定義為提供訪問值
- 方法被初始化來改善功能
- 初始狀態是由初始化函數定義
- 功能被擴大,超出默認值
- 確認協議功能標準
語法
Class classname {
Definition 1
Definition 2
---
Definition N
}
定義類
class student{
var studname: String
var mark: Int
var mark2: Int
}
創建一個實例的語法:
let studrecord = student()
示例
class MarksStruct {
var mark: Int
init(mark: Int) {
self.mark = mark
}
}
class studentMarks {
var mark = 300
}
let marks = studentMarks()
println("Mark is /(marks.mark)")
當我們使用 playground 運行上面的程序,我們得到以下結果
Mark is 300
訪問類屬性作為引用類型
類屬性可使用 '.' 語法來訪問。屬性名稱由 "." 分離在實例名后。
class MarksStruct {
var mark: Int
init(mark: Int) {
self.mark = mark
}
}
class studentMarks {
var mark1 = 300
var mark2 = 400
var mark3 = 900
}
let marks = studentMarks()
println("Mark1 is /(marks.mark1)")
println("Mark2 is /(marks.mark2)")
println("Mark3 is /(marks.mark3)")
當我們使用 playground 運行上面的程序,得到以下結果
Mark1 is 300Mark2 is 400Mark3 is 900
類標識符
在 Swift 引用多個常量和變量指向的單個實例。要了解常量和變量指向一個特定的類實例標識操作符的使用。 類實例總是通過引用傳遞。在類NSString,NSArray 和 NSDictionary 實例始終分配作為參考傳遞到現有的實例,而不是使用一個副本。
class SampleClass: Equatable {
let myProperty: String
init(s: String) {
myProperty = s
}
}
func ==(lhs: SampleClass, rhs: SampleClass) -> Bool {
return lhs.myProperty == rhs.myProperty
}
let spClass1 = SampleClass(s: "Hello")
let spClass2 = SampleClass(s: "Hello")
spClass1 === spClass2 // false
println("/(spClass1)")
spClass1 !== spClass2 // true
println("/(spClass2)")
當我們使用 playground 運行上面的程序,得到以下結果
main.SampleClassmain.SampleClass
結構體
Swift 提供了利用構造作為結構的靈活的構建塊。 通過利用這些結構的一次可以定義構建體的方法和屬性。
這不同于 C 和 Objective C 編程:
結構不用要求實現文件和接口。
結構體使我們能夠創建一個文件并自動擴展其接口到其它塊。
在結構體中的變量值被復制并傳遞在后續的代碼,通過返回的舊值的副本使得這些值不能被改變。
語法
Structures are defined with a 'Struct' Keyword.
struct nameStruct {
Definition 1
Definition 2
---
Definition N
}
結構體的定義
考慮例如,假設要訪問包含三個科目記錄標記的學生并找出三個科目的總和。在這里,markStruct用于初始化的結構有三個標記,數據類型為 'Int'。
struct MarkStruct{
var mark1: Int
var mark2: Int
var mark3: Int
}
訪問結構體及屬性
結構的成員是由它的結構名訪問。 結構體的實例中由 'let' 關鍵字進行初始化。
struct studentMarks {
var mark1 = 100
var mark2 = 200
var mark3 = 300
}
let marks = studentMarks()
println("Mark1 is /(marks.mark1)")
println("Mark2 is /(marks.mark2)")
println("Mark3 is /(marks.mark3)")
當我們使用 playground 運行上面的程序,得到以下結果:
Mark1 is 100Mark2 is 200Mark3 is 300
學生成績需要訪問結構名“studentMarks”。結構成員被初始化為 mark1, mark2, mark3 的整數類型值。然后,結構體 studentMarks()傳遞給 'marks' 使用 'let' 關鍵字。 'marks' 將包含結構成員的值?,F在通過 '.' 訪問結構的初始名稱的值,并打印它。
struct MarksStruct {
var mark: Int
init(mark: Int) {
self.mark = mark
}
}
var aStruct = MarksStruct(mark: 98)
var bStruct = aStruct // aStruct and bStruct are two structs with the same value!
bStruct.mark = 97
println(aStruct.mark) // 98
println(bStruct.mark) // 97
當我們使用 playground 運行上面的程序,得到以下結果:
9897
結構體最佳使用方式
Swift 語言提供功能來定義的結構體作為自定義數據類型,用于構建功能塊。 結構體的實例的值傳遞給定義塊來進一步的操作。
需要有結構:
封裝簡單的數據值
使用“值”而不是“引用”復制封裝數據到它的相關聯屬性
結構體為 “復制” 和 “引用”
在 swift 中結構體是通過其成員的值,而不是它的引用。
struct markStruct{
var mark1: Int
var mark2: Int
var mark3: Int
init(mark1: Int, mark2: Int, mark3: Int){
self.mark1 = mark1
self.mark2 = mark2
self.mark3 = mark3
}
}
var marks = markStruct(mark1: 98, mark2: 96, mark3:100)
println(marks.mark1)
println(marks.mark2)
println(marks.mark3)
當我們使用 playground 運行上面的程序,得到以下結果:
9896100
另外一個實例
struct markStruct{
var mark1: Int
var mark2: Int
var mark3: Int
init(mark1: Int, mark2: Int, mark3: Int){
self.mark1 = mark1
self.mark2 = mark2
self.mark3 = mark3
}
}
var fail = markStruct(mark1: 34, mark2: 42, mark3: 13)
println(fail.mark1)
println(fail.mark2)
println(fail.mark3)
當我們使用 playground 運行上面的程序,得到以下結果:
344213
結構體 “markStruct” 需要它的成員首先定義:mark1, mark2 和 mark3. 現在,成員類的變量初始化容納整數值。之后結構成員的副本使用 “self” 關鍵字創建。當結構成員的副本創建結構體塊,其參數標記傳遞給 'marks' 變量,它現在將保存學生的分數。那么標記打印為 98, 96, 100。 下一步對于相同的結構成員的另一個實例命名為 'fail' 用于指向不同的標記相同結構體的成員。那么標記現在打印為 34, 42, 13. 這清楚地說明了結構會有成員變量的副本,傳入成員到它們即將推出的功能塊。