Develop
2021.01.27 06:46

[swift] NotificationCenter 간단 예제

Views 8112 Votes 0 Comment 0
Atachment
Attachment '1'
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print
?

Shortcut

PrevPrev Article

NextNext Article

Larger Font Smaller Font Up Down Go comment Print

How To Post Notifications

noti01.jpg


Now that we’re observing for a notification, let’s post it! Posting a notification is simple:

NotificationCenter.default.post(name: .didReceiveData, object: nil)

The function post(name:object:userInfo:) has 3 parameters:

  1. The first parameter is name, the notification name, of type Notification.Name. It’s exactly the same as the notification you’re observing, and it’s smart to use that extension here too.
  2. The second parameter is object, the sender of the notification. You can leave it empty with nil or use any object. It’s purpose is the same as the object parameter of addObserver(...), so you can use it to filter the sender of a notification.
  3. The third parameter is userInfo, and you can use it to send extra data with the notification. The parameter is not required, so you can leave it out if you don’t need it.

Let’s say you want to display some data in a table view. The data comes from a JSON webservice, and contains the game scores of Bob, Alice and Arthur.

You register for the .didReceiveData notification in the table view controller, like this:

NotificationCenter.default.addObserver(self, selector: #selector(onDidReceiveData(_:)), name: .didReceiveData, object: API.shared)

And the onDidReceiveData(_:) function looks like this:

@objc func onDidReceiveData(_ notification: Notification)
{
    if let data = notification.userInfo as? [String: Int] {
        for (name, score) in data {
            print("\(name) scored \(score) points!")
        }
    }
}

In the example above, this happens:

  • First, you’re using conditional binding to downcast the type of userInfo to [StringInt] with the type cast operator as?. Because the type of userInfo is [AnyHashableAny]? – basically any dictionary – you can downcast its type to the dictionary type you’re expecting. That’s string keys and integer values in the example above. If the cast succeeds, then data contains the value of userInfo as type [StringInt].
  • Then, using a for in loop, the items in the data dictionary are iterated. We’re using a tuple (name, score) to decompose the key and value of the dictionary items.
  • Finally, inside the loop, we’re printing out the names and scores of Bob, Alice and Arthur.

When we want to post the notification that contains the data, we do this:

let scores = ["Bob": 5, "Alice": 3, "Arthur": 42]

NotificationCenter.default.post(name: .didReceiveData, object: self, userInfo: scores)

See how the scores dictionary is provided as the argument for userInfo? We’re basically sending those score data alongside the notification. They’ll get picked up in onDidReceiveData(_:) and printed out.

Another thing stands out in the example above: the usage of object. When registering the observer, you’re specifying the sender you want to receive notifications from. Like this:

addObserver(···, selector: ···, name: ···, object: API.shared)

Then, when posting the notification we specify the object parameter too. Like this:

.post(name: ···, object: self, userInfo: ···)

You already know that self refers to the current instance of the class we’re in. So when API.shared references the same object as self, the notification is picked up by the observer.

Here’s what that class could look like:

class API
{
    static let shared = API()

    func getData() {
        NotificationCenter.default.post(name: .didReceiveData, object: self, userInfo: ···)
    }
} 

And that’s how we post notifications! Let’s continue with some use cases…


[출처] https://learnappmaking.com/notification-center-how-to-swift/



?

List of Articles
No. Category Subject Author Date Views
437 Etc [NFC] 단말기와 서버 통신 내용 hooni 2013.11.12 11189
436 Develop [c] 파일입출력 간단한 설명 hooni 2003.04.23 11243
435 Develop [unix] 유닉스 명령에 메타문자 사용 hooni 2014.02.19 11249
434 Develop [switch] 시스코 스위치(catalyst 2950) telnet 설정 hooni 2013.04.23 11271
433 Develop [ios] iOS In App Purchase 코드 부분 샘플 2 hooni 2013.11.20 11279
432 Develop [c++] mfc에서 윈도우 항상 위 속성 주기.. hooni 2013.04.23 11301
431 Develop [js] 한글주소(URL) 인코딩(encode, Encoding), 자바스크립트(JavaScript) hooni 2013.04.23 11328
430 System/OS [linux] iptables 명령어 매뉴얼(options) hooni 2003.04.23 11337
429 Develop [spring] 스프링 IoC/DI hooni 2013.04.23 11347
428 Develop [js] 인터넷 주소(URL) 인코딩 ㅋㅋ hooni 2013.04.23 11351
427 System/OS [linux] vi 편집기 간단한 명령과 환경설정 hooni 2003.04.23 11359
426 System/OS [linux] GD 라이브러리 설치 방법.. file hooni 2013.04.23 11373
425 Develop 페이팔에서 돈 찾기 (Paypal withdraw) file hooni 2014.02.20 11375
424 Develop [switch] 시스코 카탈리스트(Cisco Catalyst) 2950 미러링 설정 hooni 2013.04.23 11387
423 Develop [c++] mfc 조건별 파일 검색 프로그램 소스 ㅋㅋ 19 file hooni 2013.04.23 11403
422 Develop [c++] 기초강좌 #01(입출력,영역지정) hooni 2003.04.23 11408
Board Pagination Prev 1 ... 45 46 47 48 49 ... 74 Next
/ 74