2014-07-04 15 views
3

In Swift documentation, it says the following在Swift中使用'Any'有什麼意義?何時使用'Any'以及何時使用'AnyObject'?

夫特提供了兩種特殊類型的別名與非特定類型的工作: AnyObject可以表示任何類型的一個實例。 除函數類型外,任何類型都可以表示任何類型的實例。 注意 只有當您明確需要它們提供的行爲和功能時才使用Any和AnyObject。對代碼中期望使用的類型進行具體說明總是更好。

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

然而,當我寫了下面的代碼,它可以被編譯沒有任何錯誤:

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) 

因爲我定義myArrAnyObject[],它應該能夠只包含類類型,而myIntmyStr,和myDict都與Any兼容,而不是AnyObject,並且Any與「AnyObject」不兼容。

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

  • 即使你可以定義斯威夫特的陣列爲AnyObject,而且可以存儲斯威夫特的結構像IntString,有什麼用Any點?是否有任何情況需要將數組定義爲AnyDictionary的價值類型如何?

  • 我應該如何決定何時使用Any以及何時使用AnyObject,尤其是如果我處理的類型可以是轉換爲Objective-C的對象,像StringIntDictionary等?

我想在可可和可可觸摸最方法返回AnyObject!,不Any!。所以我想知道在Swift的數組和字典的值類型中使用Any的最佳情況是什麼。

+0

看起來像這樣在種子2中發生了變化。我猜他們甚至不知道他們在做什麼。 –

+0

我使用Xcode 6 Beta 2.我還添加了'import Foundation',但沒有它的代碼被編譯。 – Blaszard

回答

1

那麼你可以使用任何[]來存儲自定義結構。

1

然而,當我寫了下面的代碼,它可以在不 任何錯誤編譯:

若你沒有import Foundation。沒有導入基金會,就會有很多錯誤。它只爲您編譯,因爲基金會已將數字類型橋接到NSNumberStringNSString等。

相關問題