![](/img/trans.png)
[英]Swift/iOS: How to use inout parameters in functions with AnyObject/Any or Pointers
[英]What's the point of using 'Any' in Swift? When to use 'Any' and when to use 'AnyObject'?
Swift提供了兩種特殊類型的別名來處理非特定類型:AnyObject可以表示任何類類型的實例。 除了函數類型之外,任何可以表示任何類型的實例。 注意僅在明確需要它們提供的行為和功能時才使用Any和AnyObject。 最好具體了解您希望在代碼中使用的類型。
如果我理解正確的話, AnyObject
應該在它與類類型兼容時使用,這意味着它不能代表Swift的內置String
, Int
, Dictionary
, Array
等......因為它們都表示為結構,而不是類,在斯威夫特。
但是,當我編寫以下代碼時,它可以編譯而沒有任何錯誤:
var myInt: Int = 10
var myStr: String = "st"
var myDict:Dictionary<String, AnyObject> = ["k1": "1", "k2": 2, "k3": true]
var myArr:Array<AnyObject> = []
myArr.append(myInt)
myArr.append(myStr)
myArr.append(myDict)
println(myArr)
因為我將myArr
定義為AnyObject[]
,它應該只能包含類類型,而myInt
, myStr
和myDict
都與Any
兼容,而不是AnyObject
,而Any
與`AnyObject不兼容。
但是,我認為它可以編譯的原因是因為myInt
可以在內部轉換為Objective-C的NSInteger
,它是AnyObject
的子類型。 String
/ NSString
和Dictionary
/ NSDictionary
也是如此。 我猜是正確的嗎? 那么,這是我的問題:
即使您可以將Swift的數組定義為AnyObject
並仍然存儲Swift的結構,如Int
或String
,使用Any
什么意義呢? 是否有任何情況需要將數組定義為Any
? Dictionary
的價值類型怎么樣?
我應該如何決定何時使用Any
以及何時使用AnyObject
,特別是如果我處理一個可以轉換為Objective-C的Object的類型,比如String
, Int
, Dictionary
等?
我認為Cocoa和Cocoa Touch中的大多數方法都返回AnyObject!
,不是Any!
。 所以我想知道在Swift的Array和Dictionary的值類型中使用Any
的最佳情況是什么。
那么你可以使用Any []存儲自定義結構。
但是,當我編寫以下代碼時,它可以編譯而沒有任何錯誤:
如果您沒有import Foundation
則不會。 沒有導入Foundation,就會出現很多錯誤。 它只為你編譯,因為基金會為NSNumber
, String
到NSString
等數字類型建立了橋接。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.