タグ別アーカイブ: Objective-C

[Obj-C] 反復処理

enumrateObjectsUsingBlockメソッド

block
配列の要素に適用する操作。blockの中が for(;;){ do_anything; } の do_anything に相当する。
obj
配列から取り出した要素。
idx
配列要素のインデックス。forループのカウンター値に相当する。

stop
停止フラグ。stopにYESを代入するとその時点で停止する。forループのbreak文に相当する。

Objective-CからSwiftのクラスが参照できない

課題

Objective-CからSwiftのクラスが参照できない。

Use of undeclared identifier 'xxx'

 

チェックポイント

ポイント 1

Objective-C(*.m, *.mm)において ProjectName-Swift.h をインポートしなければならない。

 

ポイント 2

Objective-Cから参照するSwiftで実装するクラスは NSObject の派生クラスでなければならない。

[Obj-C] メソッドファミリー

Objective-Cにおいてインスタンスを生成するメソッドは命名規則が決まっている。この命名規則を元に処理系がオーナーシップポリシーを判定して、コンパイル時の警告やエラーを判定するため注意すること。SwiftからObjective-Cのメソッドを呼び出したときも、下記の『メソッドファミリー』が影響する。

続きを読む

Objective-Cのenumをswiftから参照する

一般的なObjective-Cでのenum定義とSwiftからの参照

Objective-C

Swift

列挙子名 GRADE に一致する接頭辞 GRADE + _ (アンダーバー) までが、Swiftから参照するときに削除される。

 

Trickyなenum列挙子の命名方法

列挙子名 GRADE に部分一致する接頭辞 GR + _ (アンダーバー) までが、Swiftから参照するときに削除される。

[Obj-C] NSNull

NSDictionaryやNSArrayの要素としてnilを格納することはできない。
nilの代わりに[NSNull null]を格納する。

[NSNull null]はシングルトン。ただ一つのインスタンスを参照する。

[NSNull null] と nil の比較はできない。

 

比較の例

 

NSLogの出力の違い

[Xcode] @importを有効にする

Objective-CやC言語のなかで @import文 を有効にする方法。
以下の設定が無効(No)のときは、@importで該当するソース(header file)を参照できない。

Xcodeの "Enable Modules (C and Objective-C)" を有効(Yes)にする。

PROJECT ⇒ Build Settings ⇒ Apple LLVM x.x – Language – Modules ⇒ Enable Modules (C and Objective-C)

[Obj-C] ブロック内の強参照(循環参照)を回避する方法

強参照をブロックに渡す例

弱参照をブロックに渡す例