2015-06-18 13 views
8

Słyszałem o komunikacji w stylu Java pomiędzy komponentami bez konieczności wyraźnego wzajemnego rozpoznawania komponentów, czyli magistrali zdarzeń. Wydaje się, że za pomocą magistrali zdarzeń można komunikować się między różnymi klasami. łatwo z mniejszym potrzebnym kodowaniem. Wiem, że NSNotifications w iOS też to robią. NSNotification nie jest tutaj zamiennikiem. Proszę dać mi znać osobno od wzoru delegacji, co jest dobrym rozwiązaniem w iOS, które jest dobrym zamiennikiem EventBus do komunikacji między klasami.Ekwiwalent magistrali zdarzeń w systemie iOS

+0

dlaczego tag "android"? –

+0

Czy jesteś pewien, że NSNotificationCentre nie jest tym, czego szukasz? https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSNotificationCenter_Class/index.html – Toby

+0

Nie. NSNotificationCentre używa jednej do wielu komunikacji. Potrzebuję komunikacji jeden do jednego na raz. –

Odpowiedz

7

Z Swift można użyć SwiftEventBus. Jest to po prostu ładne wrapper around NSNotificationCenter i DispatchQueue.

Rejestracja na wydarzenie:

SwiftEventBus.onMainThread(target, name: "someEventName") { result in 
    // UI thread 
    // Do something when the event occurr 
} 

wyzwolić zdarzenie:

SwiftEventBus.post("someEventName") 

A jeśli trzeba je dostosować The source code jest krótki, jasne i łatwy do Rozumiesz.

+8

Hej, jestem twórcą biblioteki, cieszę się, że jesteście przydatni :) okrzyki – cesarferreira

0

Spójrz na tolo.
Funkcjonalność jest nieco podobna do magistrali zdarzeń i ma jedną dużą przewagę nad NSNotification, ponieważ nie musisz wyrejestrowywać się podczas dealokowania (jak w iOS9).

3

Chyba może użycie NSNotificationCenter za to, czytałem komentarz o to jeden-do-wielu, i to prawda domyślnie, ale można określić, z którego przedmiotem chcesz otrzymywać wiadomości tak:

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(someSelector:) 
              name:@"MyPersonalNotification" 
              object:someOtherObject]; 

Tutaj otrzymasz MyPersonalNotification w someSelector: tylko po opublikowaniu someOtherObject. To sprawiło, że komunikacja była indywidualna.

Możesz także użyć Key-Value Observing API, ale osobiście uznałem, że jest to dość niewygodne.

Powiązane problemy