163
161

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Swift3での大きな変更点(AnyObject→Any)Dictionary,Arrayなどでの型指定方法まとめ

Last updated at Posted at 2016-09-10

Swift3へ移行時に発生する大きな問題点

Swift3になって、APIを使用していてJSONをパースしているようなアプリが特に影響を受ける変更がありました。

###それは、AnyObject型 が Any型 に置き変わったことです!!

これによって、JSONを受け取る際の型の指定などが変わることになります。APIを沢山使っているアプリは影響範囲が広くなると思います。

Objective-C, Swift2, swift3の型違い対応表

Objective-C Swift2 Swift3
id AnyObject Any
NSArray * [AnyObject] [Any]
NSDictionary * [NSObject: AnyObject] [AnyHashable: Any]
NSSet * Set<NSObject> Set<AnyHashable>

具体的なコードで見ていきましょう

Dictionary(今まで)

filename.swift

var dictionaryObject: [String: AnyObject] = [
    "key1": "文字列1",
    "key2": 1,
    "key3": true
]

Dictionary(Swift3)

filename.swift

var dictionaryObject: [String: Any] = [  //AnyObjectがAnyに替わる!
    "key1": "文字列1",
    "key2": 1,
    "key3": true
]

NSDictionary(今まで)

filename.swift

var nsdictionaryObject: [NSObject: AnyObject] = [
    "key1": "文字列1",
    "key2": 1,
    "key3": true
]

NSDictionary(Swift3)

filename.swift

var nsdictionaryObject: [AnyHashable: Any] = [  //NSObjectがAnyHashableに、AnyObjectがAnyに替わる!
    "key1": "文字列1",
    "key2": 1,
    "key3": true
]

Array(今まで)

filename.swift

var arrayObject: [AnyObject] = [
    "文字列1",
    1,
    true
]

Array(Swift3)

filename.swift

var arrayObject: [Any] = [  //AnyObjectがAnyに替わる!
    "文字列1",
    1,
    true
]

JSONシリアライズ(今まで)

filename.swift

let object: AnyObject = try JSONSerialization.jsonObject(with: data, options: opt)

JSONシリアライズ(Swift3)

filename.swift

let object: Any = try JSONSerialization.jsonObject(with: data, options: opt)

編集後記

Swift3へ移行するときに、多くのアプリはこの改修が必用になると思われます。結構大きな変更ですよね。
AlamofireやSwiftyJSONなど有名なライブラリも同様の修正がプルリクにあがってました。
何か間違っている点などありましたらご指摘ください。

参考文献

https://apple.github.io/swift-evolution/
https://www.mail-archive.com/swift-users@swift.org/msg01909.html
http://stackoverflow.com/questions/38963362/xcode-8-beta-6-anyobject-replaced-by-any-where-is-classforcoder

163
161
1

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
163
161

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?