Kotlin

SwiftとKotlinの違い「Generics編」


こんばんはささおです

 

SwiftとKotlinって書き方が似ているところと、

どちらもモバイルアプリを中心に使用されているせいか

よく比較されますよね〜

 

そこで今回はGenericsについてです!

KotlinではできるけどSwiftにはできないGenericsの機能についてを書いていきます!

 

それでは書いていきましょう!!

 

できる(Kotlin)

『AnimalBoxというTという型パラメータを使用しているクラス』

『Animalというベースになっているクラス』

『CatというAnimalを継承しているクラス』を定義しています。

で、何が言いたいの??

注目すべきはここです!

 

animalBoxという変数を定義する際に

『型パラメータにAnimalを指定したAnimalBoxのインスタンス』を格納してます。

 

さらに次の行!!

その『animalBox変数』

『型パラメータにCatを指定したAnimalBoxのインスタンス』を代入しています!

 

CatはAnimalの子クラスです。普通にできそうですが、Swiftにはできない機能です。

これを『共変』といいます。

共変させるにはクラスを定義するときの型パラメータの前に『out』をつけてあげる必要があります。

 

これがKotlinにできてSwiftにできないことです!

 

 

できない(Swift)

Swiftではできないわけですが、一応やってみます。

Cannot assign value of type ‘AnimalBox<Cat>’ to type ‘AnimalBox<Animal>’と言われてしまいます・・・

『AnimalBox<Animal>の型にAnimalBox<Cat>のインスタンスを代入をすることはできないよ!』ってな感じですね。

やっぱりできませんね・・・

 

Swiftでは共変性がないの??

う〜んあるにはあるっぽいんですよ・・・

なんとArrayやOptionalは共変します・・・!

できちゃいますね〜

難しいですね〜

 


コメントを残す

*