AnyObject
hanya untuk tipe referensi (kelas), Any
untuk tipe nilai dan referensi.
Jadi, Anda harus pergi [String: Any]
.
Ketik Casting untuk Any dan AnyObject
Swift menyediakan dua tipe khusus untuk bekerja dengan tipe nonspesifik:
Any
dapat mewakili sebuah instance dari tipe apa pun, termasuk tipe fungsi.
AnyObject
dapat mewakili instance dari jenis kelas apa pun.
CATATAN:
Gunakan Any
dan AnyObject
hanya jika Anda secara eksplisit membutuhkan perilaku dan kemampuan yang mereka sediakan. Itu selalu lebih baik untuk lebih spesifik tentang jenis yang ingin Anda kerjakan dalam kode Anda.
Dari Bahasa Pemrograman Swift :
https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/TypeCasting.html#//apple_ref/doc/uid/TP40014097-CH22-ID342
-
Perhatikan juga bahwa ketika Anda bekerja dengan Cocoa API, adalah umum untuk menerima Array dari AnyObject, ini karena array Objective-C TIDAK dicirikan. Jadi, Anda perlu mentransmisikannya ke tipe array yang Anda harapkan.
-
EDIT: (22 desember 2015)
Pada pernyataan terakhir, perhatikan bahwa ini berubah dengan Swift 2.0 dan Xcode 7.
Apple telah memperkenalkan generik 'Ringan' di Objective-C sehingga banyak Cocoa API sekarang sudah mengembalikan jenis yang benar.
EDIT: (18 Oktober 2016)
Perhatikan bahwa, mulai Swift 3.0, Objective-C id
sekarang diimpor sebagai Any
, bukan lagi sebagai AnyObject
.
String
,Array
danDictionary
bukan kelas, untuk penggunaan ini Any.NSString
,NSArray
danNSDictionary
merupakan kelas namun versi Swift yang berfungsi sama bukanlah kelas dan yang membuat banyak pengembang.Apakah Anda menggunakan
Any
atauAnyObject
bergantung pada tujuan penggunaan Anda:Jika kamus Anda hanya akan digunakan dalam kode Swift, maka Anda harus menggunakan
Any
karena jenis Anda (Int
,Double
,Float
,String
,Array
, danDictionary
) tidak objek.Jika Anda akan meneruskan kamus Anda ke rutinitas Objective-C yang mengharapkan
NSDictionary
, maka Anda harus menggunakanAnyObject
.Bila Anda
import Foundation
atauimport UIKit
atauimport Cocoa
, adalah mungkin untuk mendeklarasikan array Anda sebagai[String: AnyObject]
, namun dalam kasus ini Swift memperlakukan AndaInt
,Double
,Float
literal sebagaiNSNumber
, AndaString
sebagaiNSString
, AndaArray
sebagaiNSArray
, dan kamus Anda sebagaiNSDictionary
, yang semuanya objek. Sebuah kamus yang digunakanAnyObject
sebagai tipe nilai dapat diubah menjadiNSDictionary
, tetapi yang menggunakanAny
tidak.sumber
Menurut dokumentasi Swift Apple,
Untuk lebih jelasnya silahkan cek ini: Blog
sumber
Periksa jawaban SO ini :
sumber