2
2

More than 5 years have passed since last update.

Objective-Cでキャストする際、キャスト先のメソッドさえちゃんと実装していれば動く。

Last updated at Posted at 2014-03-15

Objective-Cのランタイム時の挙動を知っている人には常識ですが、
同じスーパークラスやプロトコルを継承していないクラス間でも、
メソッドさえ実装していればとりあえず動きます。

例えば以下のようなALAssetGroupそのまんまのメソッドを実装したLocalAssetGroupというクラスを作ってALAssetGroupにキャストすればそのまんま動きます。JavaやC#のような静的言語と違って。
なんで、別のクラス同士を混在させたい場合、共通化するアダプタークラスみたいなのは用意する必要は有りません。

@interface LocalAssetGroup : NSObject
+ (NSInteger)numberOfAssets;
- (id)valueForProperty:(NSString *)property;
- (CGImageRef)posterImage;
- (void)setAssetsFilter:(ALAssetsFilter *)filter;
- (NSInteger)numberOfAssets;
- (void)enumerateAssetsWithOptions:(NSEnumerationOptions)options usingBlock:(AssetGroupEnumerationResultsBlock)enumerationBlock;
- (void)enumerateAssetsUsingBlock:(AssetGroupEnumerationResultsBlock)enumerationBlock;
@end
2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2