Как вывод типов работает при предположении типов коллекции в swift - PullRequest
0 голосов
/ 14 декабря 2018
var arrayorset=["0","1","21"]

Swift - это вывод типа и безопасность типов, но как swift знает разницу между наборами и массивом

будет проблема, когда массив нужен вместо набора, потому что множества неупорядочены, перечисляют егоне могу получить список по порядку

так как решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

... как быстро узнать разницу между наборами и массивом ...

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

- это литерал массива , и вывод типазадокументировано с протоколом ExpressibleByArrayLiteral (выделение добавлено):

Массивы, наборы и наборы параметров все соответствуют ExpressibleByArrayLiteral
...
Поскольку Массив является типом по умолчанию для литерала массива, без написания какого-либо другого кода вы можете объявить массив с конкретным типом элемента, указав одно или несколько значений.

Следовательно,

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

объявляет массив строк, и для объявления набора строк требуется явная аннотация типа:

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

Обратите внимание, что Set достаточно для аннотации типа здесь, элементтип String выводится из литерала массива.

0 голосов
/ 14 декабря 2018

Набор может быть инициализирован литералом массива для удобства.Чтобы указать, что вы хотите набор вместо массива, вы можете аннотировать тип:

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"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...