LoginSignup
3

More than 5 years have passed since last update.

Swift 1.2でobj-cのクラスメソッドの呼び方

Last updated at Posted at 2015-07-28

気が向いたのでプロジェクトにSwiftを混ぜてみた。
ら、obj-cのクラスメソッドをうまく呼べなかった。
documentにも何も書いてない。

現象

@interface someClass:NSObject
+ (instancetype)classMethodObject;
@end

みたいなのを

let x = someClass.classMethodObject()

とやろうとすると、エラーってくれる。
なにがunavailableだ! どう見てもあるだろ!

結論

面倒くさいので結論だけ書くと、obj-c = swift間のブリッジの実装が非常にクソで、メソッド名を拾って適当にごまかしてやがるようで、sharedObjectとかsingletonとか、そういう感じのそれっぽい名前にしてやるとなんか認識される。
それか、あるいは、クラスメソッドを引数付きにするのでもいいらしい。

+ (instancetype)singleton{
    return [self classMethodObject];
}

とかを付け加えてやると

let x = someClass.singleton()

は何故か通る。

参考

Swift's Objective-C bridging and initializers
How to call an Objective-C singleton from Swift? - Stack Overflow

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
3