屬性關聯特定的類、結構和枚舉的值。存儲的屬性存儲常量和變量的值作為實例的一部分。
下面以User類為大家介紹屬性,先上全部類代碼。
~~~
class DataImporter {
var fileName = "data.txt"
init() {
print("初始化")
}
}
private class Users {
// 有默認值的屬性
var id = 0
// 只指定類型的屬性,有可能存儲nil
var name:String?
// 懶加載,只是使用的時候才會初始化
lazy var importer = DataImporter()
// get、set
var qqTemp:String = ""
var qq:String {
// 如果使用get和set則不能使用當前屬性名賦值,以免死循環
// 獲得
get {
print("獲得")
return self.qqTemp
}
// 設置
set {
print("傳入值:\(newValue)")
self.qqTemp = newValue
}
}
// 只讀,read-only
var height: Int {
return 180
}
// 屬性觀察
var address:String = "" {
willSet {
print("新地址:\(newValue)")
}
didSet {
print("舊地址:\(oldValue)")
}
}
// 靜態變量
static var storedTypeProperty = "Some value."
}
~~~
## 基礎屬性
在類和結構體中可以建立存儲屬性,可以是常量、變量或枚舉。也可以為屬性設置初始值或不設置初始值。
~~~
private class Users {
// 有默認值的屬性
var id = 0
// 只指定類型的屬性,有可能存儲nil
var name:String?
}
~~~
使用:
~~~
let user = Users()
// 有初始值
print("\(user.id)") // 0
// 無初始值
print("\(user.name)") // nil
~~~
## 懶加載屬性
你可以給屬性添加初始值,但是有的時候你添加的初始值是一個很大的對象,但你只希望使用它的時候才初始化。這就需要用到懶加載,懶加載屬性就是當我們首次使用的時候才會創建并分配存儲空間。懶加載的關鍵字是lazy。
~~~
// 懶加載,只是使用的時候才會初始化
lazy var importer = DataImporter()
class DataImporter {
var fileName = "data.txt"
init() {
print("初始化")
}
}
print("\(user.importer.fileName)") // 先輸出"初始化",后輸出"data.txt"
~~~
## Getter和Setter
我們都知道點方法的實質是調用get和set方法,在swift中也有get和set方法。
~~~
var qqTemp:String = ""
var qq:String {
// 如果使用get和set則不能使用當前屬性名賦值,以免死循環
// 獲得
get {
print("獲得")
return self.qqTemp
}
// 設置
set {
print("傳入值:\(newValue)")
self.qqTemp = newValue
}
}
user.qq = "937447974" // 傳入值:937447974
print("\(user.qq)") // 獲得 937447974
~~~
如上所示,在屬性中我們可以更加精確的控制get和set方法。在set中,newValue就是外部傳入的值。
## 只讀屬性
在swift中也支持屬性只讀,簡單點就是只寫get方法,不寫set方法。但是swift考慮這種情況有更好的方式實現。
~~~
// 只讀,read-only
var height: Int {
return 180
}
~~~
## 屬性觀察
有的時候,你可能想監聽設置屬性的操作,同時又想使用當前屬性名。因為get和set中是不能使用當前屬性名的,鑒于這種情況,swift提供了兩種操作符:
- willSet:設置前調用,newValue代表外部傳入值;
- didSet:設置后調用,didSet代碼原始值。
~~~
// 屬性觀察
var address:String = "" {
willSet {
print("新地址:\(newValue)")
}
didSet {
print("舊地址:\(oldValue)")
}
}
//屬性觀察 willSet將設置,didSet已設置
user.address = "北京" // 新地址:北京 舊地址:
user.address = "天安門" // 新地址:天安門 舊地址:北京
~~~
## 靜態變量
在swift中也支持靜態變量static,使用靜態變量只需要使用類名。
~~~
// 靜態變量
static var storedTypeProperty = "Some value."
// 靜態變量
Users.storedTypeProperty = "static"
print("\(Users.storedTypeProperty)") // static
~~~
## 其他
### 參考資料
[The Swift Programming Language (Swift 2.1)](https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/ErrorHandling.html)
### 文檔修改記錄
| 時間 | 描述 |
|-----|-----|
| 2015-10-29 | 根據 [The Swift Programming Language (Swift 2.1)](https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/ErrorHandling.html)中的Classes and Structures總結 |
版權所有:[http://blog.csdn.net/y550918116j](http://blog.csdn.net/y550918116j)
- 前言
- Swift函數
- Swift閉包(Closures)
- Swift枚舉(Enumerations)
- Swift類和結構體(Classes and Structures)
- Swift屬性(Properties)
- Swift方法(Methods)
- Swift下標(Subscripts)
- Swift繼承(Inheritance)
- Swift初始化(Initialization)
- Swift銷毀(Deinitialization)
- Swift可選鏈(Optional Chaining)
- Swift錯誤處理(Error Handling)
- Swift類型選擇(Type Casting)
- Swift協議(Protocols)
- Swift訪問控制(Access Control)
- Swift高級運算符(Advanced Operators)