YUKAI / konashi-ios-sdk

konashi iOS SDK
http://konashi.ux-xu.com
Apache License 2.0
89 stars 37 forks source link

Blocks handler #45

Closed 0x0c closed 9 years ago

0x0c commented 9 years ago

blocksを使って値の取得をできるようにしました。 イベントドリブンで値を取得できます。 今まで用意されていたAPIをレガシーAPIとして別ファイルに移動させました。

0x0c commented 9 years ago

次の指摘に対して、ソースコードを修正しました。 ご確認ください。

https://github.com/YUKAI/konashi-ios-sdk/pull/45#discussion-diff-20059927 https://github.com/YUKAI/konashi-ios-sdk/pull/45#discussion-diff-20059974

mash commented 9 years ago

↑ thanks

mash commented 9 years ago

handlerが3カ所(Konashi, KNSPeripheral, KNSPeripheralImpl)にcopyされるのはいまいちだなー 3カ所の同期タイミングがばらばらだから、例えば一度Konashi.findした後 KNSPeripheral.connectedHandler = ... ってセットした後に再度Konashi.findして接続できたらconnectedHandlerはnilに上書きされてしまう。 disconnectだけKonashiにあってそれ以外には無いのも気になる。

今の状況になっているのは、connectする前にhandlerをセットしたいから、というのはわかります。

この場合には移譲のパターンがよさそう。 10個もあるhandler達をcopyしたりgetter/setterを定義するのもあれなので、全handlerを引き受けるdelegateをつくってそこにhandlerをコピーしつつ、参照したいところから参照するのがコード量とcopyの混乱は減らせそう。

0x0c commented 9 years ago

そうですね。 そこは自分も実装していて沿う感じました。 koshianが登場する前のコードを移植しているので、こうなってしまっています。 Notificationを飛ばしているので、それをキャッチしてhandlerを呼び出すのも良いかなと今思いつきました。 いかがでしょうか?

0x0c commented 9 years ago

いや、複数のkonashiをつなぐ機能を実装した場合はそれでは汚くなるので、delegateを作って実装します。

mash commented 9 years ago

複数のkonashiをつなぐ場合を考えるとKNSPeripheralにdelegateを持たせるのがいいんですかね。 connectとdisconnectだけはKonashiに持たせた方がいいのか、、

0x0c commented 9 years ago

handlerを保持するクラスを作って、その参照をKonashiクラス、KNSPeripheralクラス、Implクラスで引き回すのはどうでしょうか。 delegateを実装するより、コード量や複雑さは減ると思います。

CBCentralManagerやCBPeripheralそれぞれに特定のイベント時に呼ばれるメソッドが分散しているのが、ややこしくなっている原因ですね...

mash commented 9 years ago

いいと思います。

mash commented 9 years ago

Konashi+LegacyAPI.m のそれぞれのdeprecatedなメソッドについて、推奨する代替手段をコメントに書いておいていただけますか。 例えばKonashii2cRead:data:は使わずに何をつかうようにするんでしたっけ...

0x0c commented 9 years ago

ご確認ください。 https://github.com/0x0c/konashi-ios-sdk/commit/86d0f6acd3af6e3873b462ac0285d41626611e4f https://github.com/0x0c/konashi-ios-sdk/commit/c64e1ee9e88a04e7c665aaedd41266eb12c47d95