Swift3にしたらAnyObjectがAnyになった
はじめに
Swift2.2で作っていたプロジェクトをSwift3に対応させるために
Xcode8についている自動コンバートを利用してみたところ
AnyObject型がAnyに変更されました。
このことについて少し調べたことをまとめます。
どんな風に変わっていたのか?
AppDelegateが誰でも見えてわかりやすいかと思います。
例えば [NSObject: AnyObject]
から [UIApplicationLaunchOptionsKey: Any]
に変わっています。
Swift2.2の時
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { // ... }
Swift3の時
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { //... }
どういうことなのか?
swift-evolutionによると
Import Objective-C id as Swift Any type という改善をしたようです。
そして、この改善により、ArrayやDictyonaryなどでAnyを使うことになった模様です。
このことに関して、Swift3での大きな変更点(AnyObject→Any)Dictionary,Arrayなどでの型指定方法まとめに
わかりやすくまとまっているので、こちらを参照していただくと良いと思います。
ちなみに、Objective-Cのidとはなんなか?というと
AppleのReferenceによれば
A pointer to an instance of a class.ということなのでAnyもポインターなのでしょう。
最後に
Swift3にしたらAnyObjectがAnyになってたのが気になって調査したことをまとめました。
一応、変更になった原因とその結果どうなったかはわかりましたが、
なぜその変更が加えられたのかに関しては、 英語読むのがめんどくさくて まだ読めていないので後ほど読んでみようと思います。