Objective-CでSwift用のStatic Propertyを定義するには?

SwiftではSingletonインスタンスをstaticプロパティーとして定義することができるが、Objective-Cではそれを行うことはできない。しかしながら、Swift、特にSwift 3との整合性を図るために、Swiftから呼び出す場合に限って、Singletonインスタンスをプロパティーとして呼び出せるようにすることはできる。

まず、SwiftではSingletonインスタンスを定義するとき、以下のような定義の仕方が可能である。

一方で、Objective-Cでは、通常は以下のような定義の仕方しかできない。

従って、上記の場合、Swiftではメソッドとして扱われるようになってしまう。Swift 3では以下のように認識される。

上記は、Swift 2.xまでは統一性があったため問題なかったが、iOSのSwift 3のUIKitでは軒並みプロパティーになっているため、統一性を図ることができない。

従って、@propertyの属性部分にclassを付与すれば、Swiftからはプロパティーとして扱われるようになる。

こうした場合、Swift 3からは以下のように認識されるようになる。

なお、Objective-CからはStatic Propertyとしては扱うことができないため、あくまでSwiftでの認識のためのみに使われるという状態である。これは不都合なことではあるが、そもそもObjective-CではSingletonインスタンスについてはクラスメソッドを使って呼び出すのが標準となっているため、それほど問題ないことではある。

なお、上記の場合、Xcode 7までとの互換性を考慮すると、以下のように#ifdefで分けたほうが良さそうである。例えば、以下のようにすることで、Xcode 7までと8以降で問題なくビルドが通るようになる。

この場合、Swiftから使った場合は、Xcode 7から8にした際に修正が必要にはなるが・・・。

ウェブマスター。本ブログでITを中心にいろいろな情報や意見などを提供しております。仕事依頼や相談などについては、Contact Formよりお願いいたします。
スポンサーリンク

フォローする