为什么在 swift 中的数组声明末尾需要大括号?
Why do I need braces at the end of an array declaration in swift?
我用谷歌搜索了一段时间,每个教程都教我创建数组,只需执行以下操作:
var persons = [String]
但我正在从 swift 代码转向 iOS 开发学习 material 现在无处不在
var persons = [String]()
为什么我们最后需要那些大括号?
[String]
是 Swift 中类型的名称。具体来说,它是 Array<String>
类型,它是通用 Array<T>
类型的参数化版本。就像语句 var number = Int
没有任何意义,除非你明确地告诉编译器你正在构造一个特定类型的实例。
你想要的是var persons = [String]()
,或者,如果你想用数组文字指定变量的初始值,你可以做var persons: [String] = []
。请注意,在第二个选项中,我们被迫指定变量的类型,因为 Swift 的类型推断无法确定空数组的类型([]
持有什么值?)。
您似乎混淆了两个概念:变量声明和变量赋值。
要在 Swift 中 声明 一个空数组,您必须明确说明数组可以包含哪些类型。您可以使用长手定义来执行此操作:
var persons: Array<String>
或 shorthand 语法(首选):
var persons: [String]
请注意使用冒号“:”而不是等号“=”。
这两个都在说 "I'm declaring the existence of a variable (not constant) called 'persons' which will be a mutable Array full of Strings. Right now it's undefined though."
在 Obj-C 中,您可以将任何类型的对象放入 NSArray 中,这意味着您无法真正确定从其中得到什么。以这种方式声明数组内容是 Swift 的类型安全功能之一。您可以确信 persons
只会包含 String
个实例。
要分配一个值给你的变量,这意味着它不仅有一个定义,而且在内存中有一个有效的对象分配给它,你必须实际初始化数组:
var persons = [String]()
这本质上是一种 shorthand 方法来初始化一个将包含特定类型的空数组,而无需将任何参数传递给 init: 方法。在此之后,persons
实际上有一个值,它是一个完全空的数组,只允许包含字符串。
或者,Swift 的数组类型有第二个初始化程序,可让您传递参数:
init(count: Int, repeatedValue: T)
您可以使用它来创建数组 w/a 设置长度和初始值:
let immutableBobsArray = Array(count: 3, repeatedValue: "Bob")
println(\(immutableBobsArray)) \ ["Bob", "Bob", "Bob"]
参见 "Collection Types" in the Apple's Swift Programming Guide, and also the Array entry in the Swift Standard Library
我用谷歌搜索了一段时间,每个教程都教我创建数组,只需执行以下操作:
var persons = [String]
但我正在从 swift 代码转向 iOS 开发学习 material 现在无处不在
var persons = [String]()
为什么我们最后需要那些大括号?
[String]
是 Swift 中类型的名称。具体来说,它是 Array<String>
类型,它是通用 Array<T>
类型的参数化版本。就像语句 var number = Int
没有任何意义,除非你明确地告诉编译器你正在构造一个特定类型的实例。
你想要的是var persons = [String]()
,或者,如果你想用数组文字指定变量的初始值,你可以做var persons: [String] = []
。请注意,在第二个选项中,我们被迫指定变量的类型,因为 Swift 的类型推断无法确定空数组的类型([]
持有什么值?)。
您似乎混淆了两个概念:变量声明和变量赋值。
要在 Swift 中 声明 一个空数组,您必须明确说明数组可以包含哪些类型。您可以使用长手定义来执行此操作:
var persons: Array<String>
或 shorthand 语法(首选):
var persons: [String]
请注意使用冒号“:”而不是等号“=”。
这两个都在说 "I'm declaring the existence of a variable (not constant) called 'persons' which will be a mutable Array full of Strings. Right now it's undefined though."
在 Obj-C 中,您可以将任何类型的对象放入 NSArray 中,这意味着您无法真正确定从其中得到什么。以这种方式声明数组内容是 Swift 的类型安全功能之一。您可以确信 persons
只会包含 String
个实例。
要分配一个值给你的变量,这意味着它不仅有一个定义,而且在内存中有一个有效的对象分配给它,你必须实际初始化数组:
var persons = [String]()
这本质上是一种 shorthand 方法来初始化一个将包含特定类型的空数组,而无需将任何参数传递给 init: 方法。在此之后,persons
实际上有一个值,它是一个完全空的数组,只允许包含字符串。
或者,Swift 的数组类型有第二个初始化程序,可让您传递参数:
init(count: Int, repeatedValue: T)
您可以使用它来创建数组 w/a 设置长度和初始值:
let immutableBobsArray = Array(count: 3, repeatedValue: "Bob")
println(\(immutableBobsArray)) \ ["Bob", "Bob", "Bob"]
参见 "Collection Types" in the Apple's Swift Programming Guide, and also the Array entry in the Swift Standard Library