質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.96%

メソッドの引数の後に{}があるのはブロック構文として処理されているのか(objective-c)

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 2,390

score 42

webRTCによるビデオ通話アプリを作ろうとしています。SkyWay-Multiparty-iOSサンプル
写真一番上の

- (void)setMultiPartyEvents:(MultiParty *)mp
{


の下にある

[_mp on:MULTIPARTY_EVENT_OPEN callback:^(NSDictionary*dic) {
 ----------------------------------------------------------
 ----------------------------------------------------------
}];


などのメソッドの処理内容がわかりません。
「objective-c メソッド {} 引数」で検索するとObjective-Cのブロックの書き方一覧
など、ブロック構文の解説が載っていますが、この場合どうやら当てはまらないように見えます。

メソッドonに2つの引数を与えるとそれらに新たな値が代入されて返ってきて、{}でのみ新たな値を保持して利用できるのでしょうか。

また、1つのメソッドonが実行されると、その後のメソッドは実行されることなく- (void)setMultiPartyEventsは終了するのでしょうか。
イメージ説明

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • TarouKotani

    2017/09/01 19:58

    本当ですね!ありがとうございます!

    キャンセル

  • TarouKotani

    2017/09/01 20:00

    高評価をお返ししたいのですが、こちらの質問に対して可能でしょうか?

    キャンセル

  • fuzzball

    2017/09/01 20:07

    今さら回答するのもアレなので、御自分で回答を書いていただければと思います。

    キャンセル

回答 2

checkベストアンサー

+4

ご質問のクラス及びメソッドは、Blocksをその場で実行するのではなくプロパティとして保持しておいて必要な時に実行する、という使い方をしています。

実際にどうなっているのかを見ればわかりやすいと思うので書いてみました。

すごく久しぶりにobjcを書くので動かなかったらごめんなさい。

Blockを使うクラス。最低限だけ実装

@interface Hoge: NSObject

// blocks
@property (copy) void (^block)(NSInteger);

// blocks登録
- (void)register:(void (^)(NSInteger)) block;

// blocks実行
- (void)run;

@end


@implementation Hoge

- (void)register:(void (^)(NSInteger)) block {

    self.block = block;
}

- (void)run {

  // 本来は状況に応じて引数を変える
    self.block(0);
}

@end

使う

Hoge *hoge = [Hoge new];

// blocksの登録
[hoge register:^(NSInteger i) {

    NSLog(@"register: %ld", i);
}];

[hoge run];  // 登録したblocksが実行される

[hoge run];  // 何度でもOK

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/09/01 14:40 編集

    propery, blocのtypoと、print("")→NSLog(@"")の修正で大丈夫そうです。あ、シンタックスハイライトの言語名は objectivec です。

    キャンセル

  • 2017/09/01 15:01

    ありがとうございます。修正しました。

    キャンセル

+1

MultiParty.h ( https://github.com/nttcom/SkyWay-MultiParty-iOS/blob/master/MultiParty/Headers/MultiParty.h )の定義を読むと、

(MultiParty.hより)

/**
 Set event callbacks
 */
- (void)on:(MultiPartyEventEnum)event callback:(void (^)(NSDictionary *))callback;

 

各種イベントのコールバック(ブロック)を渡すものとなっています。
SkyWay iOS SDKドキュメント ( https://nttcom.github.io/skyway/docs/#iOS ) にも記述があります。

MULTIPARTY_EVENT_OPEN や MULTIPARTY_EVENT_MY_MS がイベント種別で、
イベントごとの処理をブロックとして渡しています。

[_mp on: ... ] はブロックを登録しているだけです。
イベントが起きた時にブロックの中が実行されます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/09/04 11:06

    イベントが起きる条件は、同じクラスの中に書かれているんですか?

    キャンセル

  • 2017/09/04 14:44

    MULTIPARTY_EVENT_OPENなどのイベントを起こしているのはSkyWayライブラリ側ですね。
    アプリ側で処理すべきタイミングで、処理内容に応じて登録したcallbackがあれば呼び出してくれます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.96%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る