ページ

2010年11月4日木曜日

Objective-Cの文法とMacRubyでの書き方(続き)

続き

Cocoaに、NSMutableStringというクラスがある。
リファレンスを見ると、

inherits from NSString : NSObject

などと書かれているが、これはNSStringを継承しているということなので、NSStringのインスタンス変数やメソッドは全て使えるということ。

なので、NSStringのstringWithString:メソッドも使える。
書き方は、こう

NSMutableString* boku = [NSMutableString stringWithString:@"Doraemon"];

MacRubyで書くとしたら

boku = NSMtableString.stringWithString "Doraemon"

となる。

NSStringで作ったインスタンスの文字列は変更ができない。NSMutableStringのインスタンスでならできる。
で、文字列を後ろに追加するメソッドとかもある。

- (void)appendString:(NSString*)string

これをObjective-Cで使ってさっきのインスタンスに文字列を追加すると

[boku appendString:@"desu"];

MacRubyでは

boku.appendString "desu"

となる。


あとは、MacRubyのチュートリアルにも載っているNSWindowのinitWithContentRect:styleMask:backing:defer:メソッド

リファレンスで見ると

- (id)initWithContentRect:(NSRect)contentRect styleMask:(NSUInteger)windowStyle backing:(NSBackingStoreType)bufferingType defer:(BOOL)deferCreation

とかなってて一見意味不明だが、これも引数とかが増えただけで基本的に同じ。

- (返り値型)メソッド名:(引数型)引数名 ラベル:(引数型)引数名: ラベル(引数型)引数名: ラベル(引数型)引数名

コロンの数と引数の数が同じになることを覚えておくと多少わかりやすい。

Objective-Cで使うときは

NSWindow *window = [[NSWindow alloc] initWithContentRect:frame
     styleMask:NSBorderlessWindowMask
     backing:NSBackingStoreBuffered
     defer:false];

MacRubyで使うときは

window = NSWindow.alloc.initWithContentRect frame,
     styleMask:NSBorderlessWindowMask,
     backing:NSBackingStoreBuffered,
     defer:false

とかになる。改行してる部分を半角スペースにして一行で書いても同じはず。

0 件のコメント:

コメントを投稿