生活随笔
收集整理的這篇文章主要介紹了
Swift
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1,通知(NSNotification)介紹
這里所說的通知不是指發給用戶看的通知消息,而是系統內部進行消息傳遞的通知。要介紹通知之前,我們需要先了解什么是觀察者模式。
觀察者模式 (Observer):指一個對象在狀態變化的時候會通知另一個對象。參與者并不需要知道其他對象的具體是干什么的 。這是一種降低耦合度的設計。常見的使用方法是觀察者注冊監聽,然后在狀態改變的時候,所有觀察者們都會收到通知。
在 MVC 里,觀察者模式意味著需要允許 Model 對象和 View 對象進行交流,而不能有直接的關聯。
Cocoa 使用兩種方式實現了觀察者模式: 一個是 Key-Value Observing (KVO),另一個便是本文要講的Notification。
2,系統通知的注冊和響應
比如我們想要在用戶按下設備的home鍵,程序進入后臺時執行某些操作。一種辦法是在AppDelegate.swift里的applicationDidEnterBackground方法里執行。
除此之外,由于程序進入后臺會發送 UIApplicationDidEnterBackgroundNotification 的通知,我們可以事先注冊個監聽這個通知的“觀察者”來處理。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let notificationCenter = NSNotificationCenter.defaultCenter()
let operationQueue = NSOperationQueue.mainQueue()
let applicationDidEnterBackgroundObserver =
notificationCenter.addObserverForName(UIApplicationDidEnterBackgroundNotification,
object: nil, queue: operationQueue, usingBlock: {
(notification: NSNotification!) in
print("程序進入到后臺了")
})
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
|
3,使用自定義的通知
通知類型其實就是一個字符串,所以我們也可以使用自己定義的通知(同時也可以傳遞用戶自定義數據)。
下面創建了兩個觀察者獲取下載圖片通知,同時收到通知后的處理函數內部添加了個3秒的等待。
--- ViewController.swift ---
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
import UIKit
class ViewController: UIViewController {
let observers = [MyObserver(name: "觀察器1"),MyObserver(name: "觀察器2")]
override func viewDidLoad() {
super.viewDidLoad()
print("發送通知")
NSNotificationCenter.defaultCenter().postNotificationName("DownloadImageNotification",
object: self, userInfo: ["value1":"hangge.com", "value2" : 12345])
print("通知完畢")
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
|
--- MyObserver.swift ---
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
import UIKit
class MyObserver: NSObject {
var name:String = ""
init(name:String){
super.init()
self.name = name
NSNotificationCenter.defaultCenter().addObserver(self, selector:"downloadImage:",
name: "DownloadImageNotification", object: nil)
}
func downloadImage(notification: NSNotification) {
let userInfo = notification.userInfo as! [String: AnyObject]
let value1 = userInfo["value1"] as! String
let value2 = userInfo["value2"] as! Int
print("(name) 獲取到通知,用戶數據是[(value1),(value2)]")
sleep(3)
print("(name) 執行完畢")
}
deinit {
NSNotificationCenter.defaultCenter().removeObserver(self)
}
}
|
運行結果如下:
發送通知
觀察器1 獲取到通知,用戶數據是[hangge.com,12345]
觀察器1 執行完畢
觀察器2 獲取到通知,用戶數據是[hangge.com,12345]
觀察器2 執行完畢
通知完畢
(通過運行可以看出,通知發送后的執行時同步的,也就是觀察者全部處理完畢后,主線程才繼續往下進行。)
原文出自:www.hangge.com轉載請保留原文鏈接:http://www.hangge.com/blog/cache/detail_828.html
總結
以上是生活随笔為你收集整理的Swift的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。