Titanium Module Development のメモです。
参考
Module の種類
Module として作成できるものは次の通り。
種類 | 説明 |
---|---|
Proxy | ネイティブコード(Objective-C)と JavaScript の橋渡しをするクラス |
ViewProxy | View のレンダリングに対応する Proxy |
View | Titanium で描画できる UI コンポーネントを表すクラス |
Module | Module セットを表すクラス |
Module クラスはモジュールとして提供するパッケージにひとつだけ存在し、Proxy、ViewProxy、View は Module パッケージ内にいくつ存在してもよい。以下、モジュール名を com.hamasyou と定義するものとする。クラス名等のプレフィックスにつく ComHamasyou はモジュール名を表す。
Proxy
Proxy クラスは TiProxy を継承して作成する。クラス名を "Module 名 + クラス名 + Proxy" にすることで、JavaScript から次のように呼び出すことができるようになる。例えば、ComHamasyouMyOriginalProxy という名前で Proxyクラスを作成すると次のようになる。
JavaScript のコード
var my_module = require("com.hamasyou"); var obj = my_module.createMyOriginal({ ... });
ComHamasyouMyOriginalProxy.h
#import "TiProxy.h" @interface ComHamasyouMyOriginalProxy : TiProxy { } @end
ComHamasyouMyOriginalProxy.m
#import "ComHamasyouMyOriginalProxy.h" @implementation ComHamasyouMyOriginalProxy @end
Proxy Methods のシグネチャ
- (id)methodName:(id)args
TiUtils を使ってメソッド引数を型に変換する
(id)args で受け取った引数は、TiUtils クラスを使って型に変換できる。
#import "TiUtils.h" NSInteger f = [TiUtils intValue:args]; NSString *s1 = [TiUtils stringValue:arg]; NSString *s2 = [TiUtils stringValue:@"key" properties:dict def:@"default"];
Proxy のプロパティ
@property を使って Proxy クラスのプロパティを宣言することで、JavaScript からプロパティを参照できる。
@property (nonatomic, readwrite, assign) NSString *propertyName;
getter/setter を用意して、任意の処理を追加することもできる。
- (void)setPropertyName:(id)value { } - (id)propertyName { return propertyName; }
createMyOriginal コンストラクタメソッドの引数にプロパティを渡した場合、setter メソッドが定義されていれば setter メソッドが、定義されていなければ dynprops という NSDictionary にプロパティが設定される。
var obj = my_module.createMyOriginal({ name: "hamasyou" }); obj.age = 28;
設定されたプロパティをコード内で使用する場合には、valueForKey、valueForUndefinedKey を使う。valueForKey は getter から、valueForUndefinedKey は dynprops からそれぞれ値を取り出す。