OpenStep APIになるべく近い設計をしようと思っているZIKUU Swift Frameworkです。
オブジェクトの
- 粒度
- 硬度
- デザインパターン
をOpenStep準拠にする。
今日はNSApplication、NSInvocation、NSResponder、NSWindowあたりまで、それっぽい実装ができました。

OpenStepの基底クラスは NSObject ですが、ZIKUUのフレームワークでは、その部分が Monas というクラスになります。

monasは辞書で引くと
物質の特性が得られるとされる単一の形而上学的存在物
という意味です。
Capability (能力) を持つクラスとして、NSObject より少しだけリッチなクラスです。
このCapabilityが、「物質の特性」というわけです。
さらに NSObject と同様に、KeyValue Coding や respondsToSelector:に似た機能も持ちます。
OpenStepの場合は、Objective-C ランタイムの上に構築されているので、Objective-Cの動的なメソッド呼び出しができますし、現在の iOSなどのAppleプラットフォームで使えるSwiftは、Objective-Cランタイムに接続されているので、SwiftでObjective-Cの機能をほぼ使えます。
Linuxで動くSwiftの場合は、このObjective-Cランタイムがないので、似たような仕組みを自前で用意しなければなりません。これがなかなか手強いですが、やり甲斐がある部分。
例えば、以下のクラスです。
NSSelectorの代替クラス

NSMethodSignatureの代替クラス

NSInvocationの代替クラス

これが少し面倒くさいんですが、OpenStep仕様の良さを引き継ごうと思うと、こういうものを避けて通ることができません。
以前、Java で EOF 相当(今ならCoreData相当)の実装をしたときに、Refectionを利用して似たような仕組みを作った経験があるので、やらなければならないことはわかってる。どうやればいいかは調べる。
そうやって実装を進めています。
CPS、Pivot Service、Inference Brokerなどと同様、このプロジェクトは純粋なソフトウェアエンジニアリング感があって楽しい。
「Swiftフレームワーク – Applicationクラス」への1件のフィードバック