我想要创建一个包含字符串的空数组。
以下两种方法有什么不同,哪一种更适合使用?
var arr:[String] = []
// versus
var arr = [String]()发布于 2015-03-22 20:49:11
首先,var arr:[String] = []通常用于初始化时添加值。您可以像这样创建一个空数组,但是通常您会做第二个来创建空数组:var are = [String]()。
这两种方法都是可以接受的,但通常在初始化时使用第一种方法来添加值,就像使用普通变量一样:您通常会编写如下内容:
var exampleVariable:String = "Example String" 要比较第二个,就像是在写:
var exampleVariable = String()简单地说,您是在添加方括号以显示您正在创建一个数组。
发布于 2015-03-22 21:02:02
AFAIU,第一种方法本质上等同于Array<String>(arrayLiteral: ...)的空文本集。第二个就是Array<String>()。尽管最终结果相同,但后者应该更可取,因为它只需更少的执行。您可以通过逐步进入说明来调试这两个选项,从而为自己探索这一点。
发布于 2022-02-03 17:23:27
这个问题我回答得太晚了,因为它不见了,在我看来,它们的关键词是Type Annotation & Type Inference。
var arr: [String] = []您正在声明一个变量arr,类型为[String] (String数组),其中包含: [String]部件。是Type Annotation
然后用[]赋值(即创建一个空数组),因为编译器知道它是一个字符串数组,所以它将创建一个空字符串数组。
var arr = [String]()您正在创建一个变量arr,而不指定其类型。然后,使用字符串数组([String](),它是[String].init()的缩写)将该变量细化。
然后,编译器通过初始化知道arr的类型。
那是Type Inference。但如果你写:
var arr = []编译器不知道什么是arr,在用myVar: ItsType声明变量时,或者在初始化时(如果使用= [String]() ),您需要告诉它。
因此,您将得到编译器错误:Empty collection literal requires an explicit type。
通常,使用这两种方法都是过分的,过于冗长。
然后你也可以写:
// 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] = []。但这是我的观点。
https://stackoverflow.com/questions/29199268
复制相似问题