Arrays 能否在Swift中使用不同类型的文本初始化数组?

Arrays 能否在Swift中使用不同类型的文本初始化数组?,arrays,swift,xcode6,Arrays,Swift,Xcode6,根据Swift文档,如果数组的类型是从数组文本推断出来的。现在我感到困惑的是,如果为数组分配Int、String和Double值,就不会抛出错误 在在线Swift编译器或版本为6.3.1或6.3.2的Xcode上尝试相同的代码。我已经在6.4上尝试了上面的方法 现在谁能告诉我阵列的类型是什么 为什么这个数组允许用不同的数据类型初始化它 谢谢。是的,您可以创建任何的数组: var sample1: [Any] = [12,"Hello"] 但是,这几乎总是一个错误,这就是为什么Swift要求您

根据Swift文档,如果数组的类型是从数组文本推断出来的。现在我感到困惑的是,如果为数组分配
Int
String
Double
值,就不会抛出错误

在在线Swift编译器或版本为6.3.1或6.3.2的Xcode上尝试相同的代码。我已经在6.4上尝试了上面的方法

现在谁能告诉我阵列的类型是什么

为什么这个数组允许用不同的数据类型初始化它


谢谢。

是的,您可以创建任何
的数组:

var sample1: [Any] = [12,"Hello"]
但是,这几乎总是一个错误,这就是为什么Swift要求您显式显示类型。您想做的绝大多数事情(除了在Swift中解析JSON…)都可以不用借助这种数据结构来完成

对于某些类型的数组,可以使用
AnyObject
而不是
Any
。这将要求所有元素都是“类似对象的”,这比
任何
都要具体一点,并且与ObjC更具互操作性:

var sample1: [AnyObject] = [12,"Hello"]
这几乎总是一个错误


您看到的错误是Swift需要“更多的上下文”。由于您的对象在
AnyObject
下面没有明显的父对象,所以Swift不知道您是否真的是这个意思,或者您是否犯了错误。在大多数情况下,这里需要的是一个所有元素都符合的协议数组。

是的,您可以创建一个
任意
的数组:

var sample1: [Any] = [12,"Hello"]
但是,这几乎总是一个错误,这就是为什么Swift要求您显式显示类型。您想做的绝大多数事情(除了在Swift中解析JSON…)都可以不用借助这种数据结构来完成

对于某些类型的数组,可以使用
AnyObject
而不是
Any
。这将要求所有元素都是“类似对象的”,这比
任何
都要具体一点,并且与ObjC更具互操作性:

var sample1: [AnyObject] = [12,"Hello"]
这几乎总是一个错误


您看到的错误是Swift需要“更多的上下文”。由于您的对象在
AnyObject
下面没有明显的父对象,所以Swift不知道您是否真的是这个意思,或者您是否犯了错误。在大多数情况下,这里需要的是一个所有元素都符合的协议数组。

这是可能的,但您应该尝试使用一种数据类型的数组。它最大限度地减少了出错的可能性

这就是为什么要显式指定数组的类型以包含任何类型的对象

你的例子变成:

var数组:[AnyObject]=[20,4.0,”]

请注意,我使用的是
AnyObject
,而不仅仅是
Any
。两者之间的区别在于
AnyObject
必须是一个类,而
Any
可以是任何东西(tuple、struct等)

当您创建相等类型对象的数组时,例如:

var数组=[20,4,8]

编译器将很乐意为您推断类型。因此,上面这行在语义上等于:

var数组:[Int]=[20,4,8]


如果您需要任何其他信息,请随时询问。

这是可能的,但您应该尝试使用一种数据类型的数组。它最大限度地减少了出错的可能性

这就是为什么要显式指定数组的类型以包含任何类型的对象

你的例子变成:

var数组:[AnyObject]=[20,4.0,”]

请注意,我使用的是
AnyObject
,而不仅仅是
Any
。两者之间的区别在于
AnyObject
必须是一个类,而
Any
可以是任何东西(tuple、struct等)

当您创建相等类型对象的数组时,例如:

var数组=[20,4,8]

编译器将很乐意为您推断类型。因此,上面这行在语义上等于:

var数组:[Int]=[20,4,8]


如果您需要任何其他信息,请随时询问。

那么您的意思是说,仅当我们使用相同类型的文字对数组类型进行赋值时,才会推断数组类型?否则,如果它属于[任何]。对吗?那么为什么我会得到上面的错误呢?因为
[Any]
[AnyObject]
几乎总是一个错误,你需要明确地列出它。但是即使你没有明确地指定它,类型也会推断正确?Swift永远不会推断
任何
任何对象
。它们必须始终是明确的。其他类型可能会被推断出来。是的,先生,我得到了这一点,但根据上面的帖子,如果我在xcode with 6.4和任何在线编译器上尝试代码,那么情况就不同了,我得到了这些错误(如图所示)。而且,它在xcode 6.3.1中也可以正常工作。您的意思是说,只有当我们使用相同类型的文字对数组类型进行赋值时,才能推断出数组类型吗?否则,如果它属于[任何]。对吗?那么为什么我会得到上面的错误呢?因为
[Any]
[AnyObject]
几乎总是一个错误,你需要明确地列出它。但是即使你没有明确地指定它,类型也会推断正确?Swift永远不会推断
任何
任何对象
。它们必须始终是明确的。其他类型可能会被推断出来。是的,先生,我得到了这一点,但根据上面的帖子,如果我在xcode with 6.4和任何在线编译器上尝试代码,那么情况就不同了,我得到了这些错误(如图所示)。而且它在xcode 6.3.1中也可以正常工作。尽管这是可能实现的,但我强烈建议您找到更好的方法来处理数据。Swift对数组类型非常具体是有原因的。虽然这是可能实现的,但我强烈建议您找到更好的方法来处理数据。斯威夫特的魅力是有原因的