ios - 为什么在 swift 中数组声明的末尾需要大括号?

标签 ios swift ios8

我在谷歌上搜索了一段时间,每个教程都教我创建一个数组,你只需执行以下操作:

var persons = [String]

但我正在从 swift code 转向 iOS 开发学习 Material ,现在无处不在

var persons = [String]()

为什么我们最后需要那些大括号?

最佳答案

您似乎混淆了两个概念:变量声明和变量赋值。

要在 Swift 中声明一个空数组,您必须明确说明该数组可以容纳哪些类型。您可以使用长手定义来执行此操作:

var persons: Array<String>

或者速记语法(首选):

var persons: [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"]

参见 "Collection Types"在 Apple 的 Swift 编程指南中,还有 the Array entry in the Swift Standard Library

关于ios - 为什么在 swift 中数组声明的末尾需要大括号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28230297/

相关文章:

ios - 取消按钮在 MFMailComposeViewController 中不执行任何操作 - iOS 8

iOS VoiceOver 辅助功能 - 操作完成后如何实现 "Action X performed"?

ios - 由于静态表格 View ,需要帮助更改侧边条码

ios - 提供必要的凭据,以编程方式登录 iCloud 帐户

swift - (Swift) 将 UITextField 中的数据保存到 Firebase Firestore 中

尝试执行playerPhysicsBody.node?.addChild(emitter!) 时,Ios 崩溃

ios - 如何在 iOS8 自定义键盘中像键盘字符一样弹出?

ios - 有没有办法让键盘触发按钮按下?

ios - AVFoundation 加载 Google Drive 视频

ios - Swift 5 的 UnsafeMutablePointer 警告