Ios 为什么在swift中数组声明的末尾需要大括号?
我在谷歌上搜索了一段时间,每个教程都告诉我,要创建数组,只需执行以下操作:Ios 为什么在swift中数组声明的末尾需要大括号?,ios,swift,ios8,Ios,Swift,Ios8,我在谷歌上搜索了一段时间,每个教程都告诉我,要创建数组,只需执行以下操作: var persons = [String] 但我正在从swift代码转向iOS开发学习材料,无论它现在在哪里 var persons = [String]() 为什么我们需要在末尾使用大括号?[String]是Swift中某个类型的名称。具体来说,它是类型数组,是泛型数组类型的参数化版本。就像语句var number=Int没有任何意义,除非您明确告诉编译器您正在构造特定类型的实例 您需要的是var persons
var persons = [String]
但我正在从swift代码转向iOS开发学习材料,无论它现在在哪里
var persons = [String]()
为什么我们需要在末尾使用大括号?
[String]
是Swift中某个类型的名称。具体来说,它是类型数组
,是泛型数组
类型的参数化版本。就像语句var number=Int
没有任何意义,除非您明确告诉编译器您正在构造特定类型的实例
您需要的是
var persons=[String]()
,或者,如果您想用数组文本指定变量的初始值,您可以执行var persons:[String]=[]
。请注意,在第二个选项中,我们被迫指定变量的类型,因为Swift的类型推断无法确定空数组的类型(什么值是[]
保持的?)。似乎混淆了两个概念:变量声明和变量赋值
要在Swift中声明空数组,必须明确说明数组可以包含哪些类型。您可以使用长线定义执行此操作:
var persons: Array<String>
注意使用冒号“:”而不是等于“=”
这两个都在说“我声明了一个名为‘persons’的变量(不是常量)的存在,它将是一个充满字符串的可变数组。但现在它还没有定义。”
在Obj-C中,您可以将任何类型的对象放入NSArray中,这意味着您无法真正确定从中可以得到什么。以这种方式声明数组内容是Swift的类型安全特性之一。您可以确信persons
将只包含String
实例
要为变量赋值,意味着它不仅具有定义,而且在内存中还具有分配给它的有效对象,您必须实际初始化数组:
var persons = [String]()
这本质上是一种初始化空数组的简写方法,该数组将保存特定类型,而无需向init:方法传递任何参数。在此之后,persons
实际上有一个值,它是一个完全空的数组,只允许包含字符串
或者,Swift的数组类型具有第二个初始值设定项,可用于传递参数:
init(count: Int, repeatedValue: T)
您可以使用此选项创建一个具有设置长度和初始值的数组:
let immutableBobsArray = Array(count: 3, repeatedValue: "Bob")
println(\(immutableBobsArray)) \\ ["Bob", "Bob", "Bob"]
在苹果的Swift编程指南中,我认为var shoppingList:[String]=[“Eggs”,“Milk”]足以在Swift中初始化它。但正如apple guide所说:您可以使用初始值设定项语法创建特定类型的空数组(无需设置任何初始值):var someInts=[Int]()因此,我是否正确地认为,在初始化空数组时只需要这些大括号,而不是在声明/初始化期间填充数组的大括号,如var shoppingList:[String]=[“Eggs”,“Milk”]正确-声明是
var name:[TypeInTheArray]
。它只使用冒号“:”。赋值运算符“=”实际上将左侧的变量设置为右侧的表达式。在您的示例中,您甚至可以省略:[String]
部分,因为Swift可以使用类型推断来确定数组包含的类型。很明显,“Eggs”是一个字符串,所以您可以说var shoppingList=[“Eggs”,“Milk”]。
您将其设置为一个填充的数组w/文本语法,该语法允许您跳过使用[String]()初始化空数组
&然后填充。是的,我知道类型推断,但括号让我困惑,因为我不熟悉语法。非常感谢
let immutableBobsArray = Array(count: 3, repeatedValue: "Bob")
println(\(immutableBobsArray)) \\ ["Bob", "Bob", "Bob"]