Mobile,Jasmine,JavaScript,Java,テスト駆動開発等)など扱っています。Xcode6スポンサードリンクXcode&Objective-CにおけるBlock構文の説明のエントリーとなります。Dispatch)」で基本となる知識です。言語をSwiftにした関連エントリーも後日作成する予定です。利用しているXcodeは6.1です。本エントリーの内容な以下の通りです。Syntax)の基本Block構文を利用する方法は数種類存在しますが、まずはtypedefでブロックを定義し利用する方法を説明させていただきます。typedef)型としてBlockを宣言し、その型を実体化し、処理内容を代入します。型としてBlockを定義する方法は以下の通りです。(^TypeName)(parameterTypes);returnTypeが戻り値の型、TypeNameが定義する型の名前、parameterTypesが引数リストとなります。定義した型の利用方法は以下のように型を指定して処理を指定します。{ブロックの実際の処理};blockName(parametersとして渡したい引数);上記の例ではTypeName型のblockNameを宣言した時点でブロックの実際の処理を指定していますが、以下のように別々にすることも可能です。{ブロックの実際の処理};blockName(parametersとして渡したい引数);ブロックへの処理内容の代入時のreturnTypeは省略可能です。戻り値も引数もないブロック戻り値も引数もないブロックのサンプルは以下の通りです。typedefにおける型の定義時に戻り値としてvoidを指定する必要がありますが、それ以外はvoidを明示的に記述する必要はありません。0;}戻り値がNSStringd、引数がintのブロック戻り値がNSStringd、引数がintのブロックのサンプルは以下の通りです。(^BlockSampleTypeName)(int);との記述となります。ブロックの動作(7行目のイコールの右)の指定部分では引数の型と引数名を指定する必要がありまが、戻り値の指定は必須ではありません。{のように書いても問題ありません。ブロック利用時のローカル変数の扱いブロックのコード内でローカル変数(ブロック外の変数)を参照することが可能です。0;}ブロックのコード内でローカル変数を参照することは可能ですが、ブロック変数の実際の処理が確定した時点でローカル変数の値も固定化されます。よって、ブロックの処理が代入された後のlocalValueの値の変更をブロックは無視します。上記コードの実行結果は以下のようになります。result=100blockSampleの処理内容が代入された後にlocalValueには200が代入されていますが、その代入の直後に実行されたブロックの処理ではlocalValueは100のままとなっています。localValueをブロックの処理で固定化したくない場合は__block修飾子をlocalValueの宣言時に付与する必要があります。0;}上記コードの実行結果は以下のようになります。result=100localValueが200になっていることが確認できます。__blockを付与することによってブロック処理からlocalValueを更新することが可能になります。更新した値はブロック実行後のlocalValueに反映されます。0;}実行結果は以下の通りです。localValue=300以上がBlock構文の基本となります。Block構文を利用(定義、宣言)する方法Block構文を利用(定義、宣言)する方法は先ほど説明させていただいたtypedefを用いた方法以外にも数種類存在します。以下のようにブロックを作成し、作成したブロックを呼び出します。{ブロックの実際の処理};実際の利用例は以下の通りです。0;}プロパティとして宣言して利用する方法クラスのプロパティとしてブロックを作成し、作成したブロックを呼び出します。copyを指定します。(^blockName)(parameterTypes);BlockSampleクラスのプロパティとしてブロックを宣言してみます。BlockSample.hは以下の通りです。NSString*);@endBlockSample.mは以下の通りです。BlockSample@endBlockSampleクラスを利用するmainは以下のようになります。0;}「ローカルのブロックとして作成、利用する方法」とほとんど同じです。宣言する場所が変わっただけです。メソッドのパラメータとして利用する方法メソッドのパラメータとしてブロックを指定し、実際のメソッド呼び出し時にブロックの動作を引数として渡すことができます。メソッドの内部でブロックを実行することができます。injection)とまでは言えませんが、動的な動作をメソッド呼び出し時に指定することが可能になります。メソッド定義時は以下のようにブロックを指定します。(^)(parameterTypes))blockName;メソッドの呼び出し時には以下のようにブロックの処理を指定します。{ブロックの実際の処理}];これはブロック構文の全てにおいて言えることですが。ブロックの処理の指定(代入)を行う時はreturnTypeは省略可能です。実際の利用例として以下のシグネチャーのメソッドを実装してみました。intValue:(int)intValue;someMethodThatTakesABlockメソッドの引数として、戻り値がint引数がintのブロックとintを指定する物です。BlockSample.hは以下のようになりました。intValue:(int)intValue;@endBlockSample.mは以下のようになりました。someMethodThatTakesABlockはblockSampleNameをsomeMethodThatTakesABlockの第二引数を引数として呼び出しリターンするだけです。blockSampleName(intValue);}@endmain.mは以下のようになりました。0;}実際に実行した時のログは以下の通りです。0ブロックに渡した引数の値をログに出していないので分かりにくいですが、main.mの14行と20行のintValue:20がsomeMethodThatTakesABlockの第二引数となりますので、この値を引数としてブロックの処理(一回目の呼び出しだと12、13行目、2回目の呼び出しだと18、19行目)が実行されます。スポンサードリンクGoogleアドセンスGoogleアドセンス関連記事Xcode5&Objective-Cでセグエを利用して画面遷移を実現する。[後編:データのやり取り]では、セグエを利用した画面遷移を実装しました。後編では、各画面間でデータのやり取りを行えるよ記事を読むXcode5のプロジェクトへのファイルやフォルダの追加方法Xcodeでアプリ開発を行う時に、イメージ(画像)の表示は必須な処理であると言えます。本エントリ記事を読むXcode&Objective-Cの文字列処理をユニットテスト(XCTestフレームワーク)で確認する。記事を読むXcode5のナビゲーションエリア[プロジェクト、シンボル、検索]の使い方Objective-Cでコーディングを行うための統合開発環境のXcodeの利用方法のエントリーです。記事を読むXcode&Objective-Cの文字列処理をユニットテスト(XCTestフレームワーク)で確認する。[NSStringの比較]前回は、NSStringの定義、分割、検索の各処理を確認しました。Layout」ですが、使いこなせるようになるのは骨が折れます。小ネタですが、Xcode6からはProjectName-Prefix.pchは自動的に生成されなくな記事を読むXcodeの使い方[ツールバー]Xcode5(iOS7対応バージョンの統合開発)の「ツールバー」の使い方のエントリーとなります。コメントをキャンセルメールアドレスが公開されることはありません。ENTRY動画で英語を学習できるiOSの無料アプリCapTubeをリリースいたしました。個人では初となるiOSアプリをリリースいたしました。前回はSwiftの概要をザックリと説明させていただきました。Mobile,Jasmine,JavaScript,Java,テスト駆動開発等)など扱っています。