快速假设集合类型时类型推断如何工作

时间:2018-12-14 08:46:42

标签: swift

var arrayorset=["0","1","21"]

Swift是类型推断和类型安全性,但是swift如何知道集合和数组之间的区别

当需要数组而不是集合时会出现问题,因为集合是无序列表,它无法按顺序检索我的列表

那么如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

为方便起见,可以使用数组文字初始化集合。要指定要使用集合而不是数组,可以注释类型:

let array = ["0", "1", "21", "1"]
let set: Set<String> = ["0", "1", "21", "1"]
print(array)  // ["0", "1", "21", "1"]
print(set)    // ["0", "1", "21"]

答案 1 :(得分:1)

  

...如何迅速知道集合和数组之间的区别...

["0", "1", "21"]

数组文字,,并且类型推断通过ExpressibleByArrayLiteral协议记录(添加了强调):

  

数组,集合和选项集均符合ExpressibleByArrayLiteral
  ...
   由于 Array是数组文字的默认类型,因此无需编写任何其他代码,因此可以通过提供一个或多个值来声明具有特定元素类型的数组。

因此

let arrayOfStrings = ["0", "1", "21"]     // [String]

声明一个字符串数组,并且需要显式类型注释来声明一组字符串:

let setOfStrings: Set = ["0", "1", "21"]  // Set<String>

请注意,Set足以用于此处的类型注释,元素类型String是从数组文字中推断出来的。