Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 为什么在swift中数组声明的末尾需要大括号?_Ios_Swift_Ios8 - Fatal编程技术网

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"]