簡體   English   中英

在Swift中使用'Any'有什么意義? 何時使用'Any'以及何時使用'AnyObject'?

[英]What's the point of using 'Any' in Swift? When to use 'Any' and when to use 'AnyObject'?

在Swift文檔中,它說如下

Swift提供了兩種特殊類型的別名來處理非特定類型:AnyObject可以表示任何類類型的實例。 除了函數類型之外,任何可以表示任何類型的實例。 注意僅在明確需要它們提供的行為和功能時才使用Any和AnyObject。 最好具體了解您希望在代碼中使用的類型。

如果我理解正確的話, AnyObject應該在它與類類型兼容時使用,這意味着它不能代表Swift的內置StringIntDictionaryArray等......因為它們都表示為結構,而不是類,在斯威夫特。

但是,當我編寫以下代碼時,它可以編譯而沒有任何錯誤:

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[] ,它應該只能包含類類型,而myIntmyStrmyDict都與Any兼容,而不是AnyObject ,而Any與`AnyObject不兼容。

但是,我認為它可以編譯的原因是因為myInt可以在內部轉換為Objective-C的NSInteger ,它是AnyObject的子類型。 String / NSStringDictionary / NSDictionary也是如此。 我猜是正確的嗎? 那么,這是我的問題:

  • 即使您可以將Swift的數組定義為AnyObject並仍然存儲Swift的結構,如IntString ,使用Any什么意義呢? 是否有任何情況需要將數組定義為Any Dictionary的價值類型怎么樣?

  • 我應該如何決定何時使用Any以及何時使用AnyObject ,特別是如果我處理一個可以轉換為Objective-C的Object的類型,比如StringIntDictionary等?

我認為Cocoa和Cocoa Touch中的大多數方法都返回AnyObject! ,不是Any! 所以我想知道在Swift的Array和Dictionary的值類型中使用Any的最佳情況是什么。

那么你可以使用Any []存儲自定義結構。

但是,當我編寫以下代碼時,它可以編譯而沒有任何錯誤:

如果您沒有import Foundation則不會。 沒有導入Foundation,就會出現很多錯誤。 它只為你編譯,因為基金會為NSNumberStringNSString等數字類型建立了橋接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM