てくてくテック

気ままに開発のメモを書いていこうと思います。主にSwiftかと。

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になってたのが気になって調査したことをまとめました。
一応、変更になった原因とその結果どうなったかはわかりましたが、 なぜその変更が加えられたのかに関しては、 英語読むのがめんどくさくて まだ読めていないので後ほど読んでみようと思います。