首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >var arr:[String] = []和var arr = [String]()

var arr:[String] = []和var arr = [String]()
EN

Stack Overflow用户
提问于 2015-03-22 20:08:38
回答 3查看 1.7K关注 0票数 0

我想要创建一个包含字符串的空数组。

以下两种方法有什么不同,哪一种更适合使用?

代码语言:javascript
复制
var arr:[String] = []

// versus

var arr = [String]()
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-03-22 20:49:11

首先,var arr:[String] = []通常用于初始化时添加值。您可以像这样创建一个空数组,但是通常您会做第二个来创建空数组:var are = [String]()

这两种方法都是可以接受的,但通常在初始化时使用第一种方法来添加值,就像使用普通变量一样:您通常会编写如下内容:

代码语言:javascript
复制
var exampleVariable:String = "Example String" 

要比较第二个,就像是在写:

代码语言:javascript
复制
var exampleVariable = String()

简单地说,您是在添加方括号以显示您正在创建一个数组。

票数 2
EN

Stack Overflow用户

发布于 2015-03-22 21:02:02

AFAIU,第一种方法本质上等同于Array<String>(arrayLiteral: ...)的空文本集。第二个就是Array<String>()。尽管最终结果相同,但后者应该更可取,因为它只需更少的执行。您可以通过逐步进入说明来调试这两个选项,从而为自己探索这一点。

票数 4
EN

Stack Overflow用户

发布于 2022-02-03 17:23:27

这个问题我回答得太晚了,因为它不见了,在我看来,它们的关键词是Type Annotation & Type Inference

代码语言:javascript
复制
var arr: [String] = []

您正在声明一个变量arr,类型为[String] (String数组),其中包含: [String]部件。是Type Annotation

然后用[]赋值(即创建一个空数组),因为编译器知道它是一个字符串数组,所以它将创建一个空字符串数组。

代码语言:javascript
复制
var arr = [String]()

您正在创建一个变量arr,而不指定其类型。然后,使用字符串数组([String](),它是[String].init()的缩写)将该变量细化。

然后,编译器通过初始化知道arr的类型。

那是Type Inference。但如果你写:

代码语言:javascript
复制
var arr = []

编译器不知道什么是arr,在用myVar: ItsType声明变量时,或者在初始化时(如果使用= [String]() ),您需要告诉它。

因此,您将得到编译器错误:Empty collection literal requires an explicit type

通常,使用这两种方法都是过分的,过于冗长。

然后你也可以写:

代码语言:javascript
复制
// Using Type Annotation:
// Declaring the variable type, the initialization doesn't need to specify it
var arr: [String] = []
var arr: Array<String> = []

// Using Type inference:
// Initialization is expliciting the type, the type is then "guessed".
var arr = [String]()
var arr = [String].init()
var arr = Array<String>()
var arr = Array<String>.init()

// Using Type Annotation & Type Inference:
// Declaring the variable type, AND also the on the initialization
var arr: [String] = [String]()
var arr: [String] = [String].init()
var arr: Array<String> = [String]() 
var arr: Array<String> = [String].init()

在我的例子中,我更喜欢var arr: [String] = []。但这是我的观点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29199268

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档