2016-07-28 19 views
1

Wir haben die EventBus-Bibliothek von greenrobot ausgiebig in der Android-Entwicklung verwendet und suchen nach etwas ähnlichem für iOS. Es sieht so aus, als ob eine Art von Event-Bus in Form von NSNotificationCenter bereits eingebaut ist, sowie einige Drittanbieter-Lösungen, die im Wesentlichen Wrapper für diese Funktionalität mit einigen zusätzlichen Funktionen für die Bequemlichkeit sind.iOS-Event-Bus-Bibliothek mit Event-Objekten?

Wir sind jedoch eher daran gewöhnt, dass Ereignisse diskrete Objekte mit klar definierten Elementvariablen sind, mit dem zusätzlichen Vorteil, dass der Polymorphismus objektorientiert ist. Die meisten iOS-Bibliotheken, die ich bisher gefunden habe, haben einen willkürlichen Event-Namen und ein beliebiges Datenpaket, was für unsere Zwecke ein wenig zu looy-goosey ist.

Das einzige Beispiel für das objektorientierte Design, das ich bisher gefunden habe, ist Tolo, das auf den ersten Blick gut aussieht, aber in etwa drei Jahren nicht aktualisiert wurde, abgesehen von einigen kleineren Dokumentationsdetails. Angesichts seines Alters ist es immer noch in Objective-C geschrieben, was zu einigen Schwierigkeiten führen kann, wenn wir irgendwann einmal unter die Haube schauen müssen (wir sind Swift sehr zugetan).

Gibt es noch andere Optionen, die ich noch nicht gefunden habe?

Antwort

0

Kein Grund, warum Sie keine bestimmte Klasse erstellen können, die Sie als Objekt in NSNotificationCenter übergeben. Es stimmt, dass viele Beispiele in dieser Hinsicht faul sind, obj-c ist traditionell ziemlich locker typisiert, was das wahrscheinlich erklärt.

Es ist auch ziemlich häufig (in Projekten größer als Online-Tutorials) eine Konstante irgendeiner Art als Ereignisname zu verwenden, entweder eine Klassenkonstante oder #define, wenn obj-c verwendet wird.

+0

Das Erstellen einer bestimmten Klasse, die als Objekt übergeben werden soll, ist nicht ausreichend, da das Objekt (oder der Inhalt des Objekts) je nach Art des Ereignisses variieren muss. Im Grunde wollen wir nur eine strenge Durchsetzung zwischen Ereignisname und Typ der erwarteten Daten. Ich habe versucht, dies mit Generika und damit verbundenen Typen zu handhaben, aber es kommt einfach nicht für mich zusammen. –

+0

Sie können immer eine Datentyp-ID in eine Variable im allgemeinen Objekt eingeben und sie dann verwenden, um die relevante Behandlung auszuwählen. Was denkst du? Übrigens, wenn Sie EventBus Port zu Swift gefunden haben, bitte hier den Link posten. –

0

Für jedermann in 2017+ Interesse an diesem, schrieb ich dieses Ding vor Ewigkeiten: https://github.com/MooseMagnet/DeliciousPubSub

Es bietet stark typisierte pub-sub. Unter der Haube verwendet es immer noch Zeichenfolgen als Schlüssel (verwendet nur den Namen des Typs), aber Sie erhalten Kompilierzeit Güte ...

Ich ließ es für eine Weile unter der Annahme sitzen, dass niemand es verwendete, aber kürzlich erhielt eine PR von jemandem, der es für Swift 3 aktualisiert hatte. Wow, solche OSS.