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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

WebRTC

WebRTC(Web Real-Time Communication)とは、プラグイン無しでウェブブラウザ間の音声通話・ビデオチャットなどリアルタイムコミュニケーションができるオープンフレームワークです。W3CがAPIレベルで、IETFがプロトコルレベルでそれぞれ標準化が進められています。

Q&A

解決済

2回答

660閲覧

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

TarouKotani

総合スコア42

Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

WebRTC

WebRTC(Web Real-Time Communication)とは、プラグイン無しでウェブブラウザ間の音声通話・ビデオチャットなどリアルタイムコミュニケーションができるオープンフレームワークです。W3CがAPIレベルで、IETFがプロトコルレベルでそれぞれ標準化が進められています。

0グッド

0クリップ

投稿2017/08/31 11:33

編集2017/09/01 10:41

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

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

の下にある

objective

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

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

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

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fuzzball

2017/09/01 00:13

なぜ「違うような気が」するのでしょうか?
TarouKotani

2017/09/01 10:42

修正しました。紹介されている文法の中に当てはまるものがないと思いました
fuzzball

2017/09/01 10:53

^( /* 引数列 */ ) { /* 本体 */ } に当てはまってますよね?
TarouKotani

2017/09/01 10:58

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

2017/09/01 11:00

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

2017/09/01 11:07

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

回答2

0

ベストアンサー

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

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

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

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

objctivec

1@interface Hoge: NSObject 2 3// blocks 4@property (copy) void (^block)(NSInteger); 5 6// blocks登録 7- (void)register:(void (^)(NSInteger)) block; 8 9// blocks実行 10- (void)run; 11 12@end 13 14 15@implementation Hoge 16 17- (void)register:(void (^)(NSInteger)) block { 18 19 self.block = block; 20} 21 22- (void)run { 23 24 // 本来は状況に応じて引数を変える 25 self.block(0); 26} 27 28@end 29

使う

objc

1 2Hoge *hoge = [Hoge new]; 3 4// blocksの登録 5[hoge register:^(NSInteger i) { 6 7 NSLog(@"register: %ld", i); 8}]; 9 10[hoge run]; // 登録したblocksが実行される 11 12[hoge run]; // 何度でもOK 13

投稿2017/09/01 05:21

編集2017/09/01 06:01
MasakiHori

総合スコア3384

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fuzzball

2017/09/01 05:42 編集

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

2017/09/01 06:01

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

0

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

(MultiParty.hより)

objc

1/** 2 Set event callbacks 3 */ 4- (void)on:(MultiPartyEventEnum)event callback:(void (^)(NSDictionary *))callback; 5

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

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

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

投稿2017/08/31 12:14

daisuke7

総合スコア1563

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

TarouKotani

2017/09/04 02:06

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

2017/09/04 05:44

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問