F.Ko-Jiの「一秒後は未来」

Objective-Cの[SomeClass class]はSwiftではSomeClass.selfと書く

AVFoundation の AVPlayer を Objective-C で使おうとすると以下のようなコードが必要になります。

#import "AVPlayerView.h"
#import <AVFoundation/AVFoundation.h>
 
@implementation AVPlayerView
 
+ (Class)layerClass
{
    return [AVPlayerLayer class];
}
 
@end

» iOS の動画再生を試す | アカベコマイリ

これを Swift に書き換える場合 [AVPlayerLayer class] をどう書き換えればいいのか分からなかったのですが、Stack Overflow に答えがありました。

» Swift class introspection & generics – Stack Overflow

回答によると「The Swift Programming Language: Types」にもあるように .self を使えばいいそうです。

したがって先程のコードは次のようになります。

import AVFoundation

class AVPlayerView: UIView {
    override class func layerClass() -> AnyClass {
        return AVPlayerLayer.self
    }
}

まぁ書き換えなくても Bridging-Header を使えば Objective-C のまま読み込んで使えるのですが、書き換え方が分かったのですべて Swift に書き換えました。

(追記 2014-08-10) AnyClass! を AnyClass に修正

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

著者について

fkoji

F.Ko-Ji

Webエンジニアやってます。最近は ドットインストール の開発がお仕事です。その傍ら、個人で Meity電車遅延なう梅酒.in#グラドル自画撮り部 の部室といったネットサービスを開発・運営してます。梅酒と草野球とリアル脱出ゲームが好きです。

» 詳しいプロフィールや運営サービスの一覧など