一.定義語法
class SomeClass {
// class definition goes here
}
struct SomeStructure {
// structure definition goes here
}
注意:一般類名和結構名首字母都大學,方法和屬性都小寫。
struct Resolution {
var width = 0
var height = 0
}
class VideoMode {
var resolution = Resolution()
var interlaced = false
var frameRate = 0.0
var name: String?
}
類和結構體實例:
let
someResolution = Resolution()
let someVideoMode =VideoMode()
訪問屬性:
我們可以用點語法來訪問一個屬性值或者改變一個屬性值。
print("The width of someVideoMode is \(someVideoMode.resolution.width)")
someVideoMode.resolution.width = 1280
print("The width of someVideoMode is now \(someVideoMode.resolution.width)")
每個 structures 都有一個默認的成員變量初始化函數。你能通過屬性名來傳值。
letvga =
Resolution(width:640,
height: 480)
二.結構體和枚舉是值類型。
一個值類型是當被賦值給另一個變量或者常量時發生深拷貝。swift 中的全部基礎類型是值類如:integers, floating-point numbers, Booleans, strings, arrays and dictionaries
三.類是引用類型
當一個引用類型的變量賦值給一個 let或者var,或者傳入一個方法時,不會發生深拷貝。他們仍然引用一個相同的實例對象。
要注意的是當 let 或者 var 引用一個對象的時候,let 和 var 並不是指針。
四.選擇結構體還是類
在下面的情況下,考慮用結構體:
1)數據結構最主要的目的是封裝一些簡單的數據
2)如果你是希望當你傳送一個數據結構到一個方法或者賦值給另一個相同類型,發生深拷貝,而不僅僅是引用的傳遞。
3)如果一個數據結構裏存放了值類型的屬性,我們應該用結構體。
4)數據結構不需要繼承其他的屬性和方法。
五.Strings,Arrays,Dictionary 的分配和複製表現。
在 swift 許多基礎類型比如 String,Array,Dictionary 是用結構體實現的。
這和 Foundation 框架裏的 NSString,NSArray 和 NSDictionary 不同,他們都是用類實現的。