Стандартная библиотека Swift: Документированные и недокументированные встроенные функции стандартной библиотеки Swift

Стандартная библиотека Swift

В Swift есть 74 встроенных функций, но только 7 из них задокументированы в книге по Swift "The Swift Programming Language». Остальные остались недокументированными.

В статье перечислены все встроенные функции Swift, и документированные и недокументированные. Определение для «встроенной функции», используемое в этой статье, можно дать как функция, доступная в Swift без импорта каких-нибудь модулей ( таких как Foundation, и тд) или ссылки на другие классы.

Давайте начнем с семи документированных встроенных функций, упомянутых в книге по Swift с последующим номером страницы, на которых функция впервые упоминается:

  1. // assert упоминается на странице 55
  2. assert(true)
  3. // countElements упоминается на странице 79
  4. countElements("foo") == 3
  5. // enumerate упоминается на странице 94
  6. for (i, j) in enumerate(["A", "B"]) {
  7.  // "0:A", "1:B" будет напечатано
  8.  println("\(i):\(j)")
  9. }
  10. // min упоминается на странице 246
  11. min(8, 2, 3) == 2
  12. // print упоминается на странице 85
  13. print("Hello ")
  14. // println упоминается на странице 4
  15. println("World")
  16. // sort упоминается на странице 14
  17. for i in sort(["B", "A"]) {
  18.  // "A", "B" будет напечатано
  19.  println(i)
  20. }

Теперь поговорим о наиболее полезных встроенных недокументированных функциях…

abs(signedNumber): Возвращает модуль по данному знаковому числу. Тривиально, но недокументированно.

  1. abs(-1) == 1
  2. abs(-42) == 42
  3. abs(42) == 42

contains(sequence, element): Возвращает истину, если данная последовательность (например, массив) содержит указанный элементю

  1. var languages = ["Swift", "Objective-C"]
  2. contains(languages, "Swift") == true
  3. contains(languages, "Java") == false
  4. contains([29, 85, 42, 96, 75], 42) == true

dropFirst(sequence): Возвращает новую последовательность (например, массив) без первого элемента последовательности.

  1. var languages = [ "Swift", "Objective-C"]
  2. var oldLanguages = dropFirst(languages)
  3. equal(oldLanguages, [ "Objective-C"]) == true

dropLast(sequence): Возвращает новую последовательность (например, массив) без последнего элемента последовательности, переданного в качестве аргумента функции.

  1. var languages = ["Swift", "Objective-C"]
  2. var newLanguages = dropLast(languages)
  3. equal(newLanguages, ["Swift"]) == true

dump(объект): Выводит содержимое объекта на стандартный вывод.

  1. var languages = ["Swift", "Objective-C"]
  2. dump(languages)
  3. // Prints:
  4. // ▿ 2 elements
  5. //   - [0]: Swift
  6. //   - [1]: Objective-C

equal(sequence1, sequence2): Возвращает истину, если sequence1 и sequence2 содержат те же элементы.

  1. var languages = ["Swift", "Objective-C"]
  2. equal(languages, ["Swift", "Objective-C"]) == true
  3. var oldLanguages = dropFirst(languages)
  4. equal(oldLanguages, ["Objective-C"]) == true

filter(sequence, includeElementClosure): возвращает элементы из последовательности, которые вычисляются в true по includeElementClosure.

  1. for i in filter(1..<100, { $0 % 10 == 0 }) {
  2.  // 10, 20, 30, ...
  3.  println(i)
  4.  assert(contains([10, 20, 30, 40, 50, 60, 70, 80, 90, 100], i))
  5. }

find(sequence, element): Возвращает индекс указанного элемента в заданной последовательности. Или nil, если элемент не найден в последовательности.

  1. var languages = ["Swift", "Objective-C"]
  2. find(languages, "Objective-C") == 1
  3. find(languages, "Java") == nil
  4. find([29, 85, 42, 96, 75], 42) == 2

indices(sequence): Возвращает индексы (начинающиеся с нуля) элементов в заданной последовательности.

  1. equal(indices([29, 85, 42]), [0, 1, 2])
  2. for i in indices([29, 85, 42]) {
  3.  // 0, 1, 2
  4.  println(i)
  5. }

join(separator, sequence): Возвращает элементы указанной последовательности, разделенные указанным сепаратором.

  1. join(":", ["A", "B", "C"]) == "A:B:C"
  2. var languages = ["Swift", "Objective-C"]
  3. join("/", languages) == "Swift/Objective-C"

map(sequence, transformClosure): Возвращает новую последовательность выполняя transformClosure для всех элементов в прилагаемой последовательности.

  1. equal(map(1..<3, { $0 * 5 }), [5, 10, 15])
  2. for i in map(1..<10, { $0 * 10 }) {
  3.  // 10, 20, 30, ...
  4.  println(i)
  5.  assert(contains([10, 20, 30, 40, 50, 60, 70, 80, 90, 100], i))
  6. }

max(comparable1, comparable2, и тд.): Возвращает наибольший из аргументов, переданных функции.

  1. max(0, 1) == 1
  2. max(8, 2, 3) == 8

maxElement(sequence): Возвращает наибольший элемент в указанной последовательности сопоставимых элементов.

  1. maxElement(1..<10) == 10
  2. var languages = ["Swift", "Objective-C"]
  3. maxElement(languages) == "Swift"

minElements(sequence): Возвращает наименьший элемент в указанной последовательности сопоставимых элементов.

  1. minElement(1..<10) == 1
  2. var languages = ["Swift", "Objective-C"]
  3. minElement(languages) == "Objective-C"

reduce(sequence, initial, combineClosure): Рекурсивно уменьшает элементы в последовательности в одно значение, запустив combineClosure на них, и начиная со значения initial.

  1. var languages = ["Swift", "Objective-C"]
  2. reduce(languages, "", { $0 + $1 }) == "SwiftObjective-C"
  3. reduce([10, 20, 5], 1, { $0 * $1 }) == 1000

reverse(sequence): Возвращает элементы указанной последовательности в обратном порядке.

  1. equal(reverse([1, 2, 3]), [3, 2, 1])
  2. for i in reverse([1, 2, 3]) {
  3.  // 3, 2, 1
  4.  println(i)
  5. }

startsWith(sequence1, sequence2): Возвращает true, если начальные элементы sequence1 равны начальным элементам sequence2.

  1. startsWith("foobar", "foo") == true
  2. startsWith(10..100, 10..15) == true
  3. var languages = ["Swift", "Objective-C"]
  4. startsWith(languages, ["Swift"]) == true

Ниже приводится полный список всех 74 встроенных функций в Swift. Функции, описанные выше, я думаю, будут полезны при работе каждый день, а может быть, я упустил некоторые функции из списка ниже, которые заслуживают упоминания. Если это так, дайте мне знать в комментариях и, пожалуйста, пишите короткий фрагмент кода, чтобы показать, как использовать эту функцию.

  1. abs(...)
  2. advance(...)
  3. alignof(...)
  4. alignofValue(...)
  5. assert(...)
  6. bridgeFromObjectiveC(...)
  7. bridgeFromObjectiveCUnconditional(...)
  8. bridgeToObjectiveC(...)
  9. bridgeToObjectiveCUnconditional(...)
  10. c_malloc_size(...)
  11. c_memcpy(...)
  12. c_putchar(...)
  13. contains(...)
  14. count(...)
  15. countElements(...)
  16. countLeadingZeros(...)
  17. debugPrint(...)
  18. debugPrintln(...)
  19. distance(...)
  20. dropFirst(...)
  21. dropLast(...)
  22. dump(...)
  23. encodeBitsAsWords(...)
  24. enumerate(...)
  25. equal(...)
  26. filter(...)
  27. find(...)
  28. getBridgedObjectiveCType(...)
  29. getVaList(...)
  30. indices(...)
  31. insertionSort(...)
  32. isBridgedToObjectiveC(...)
  33. isBridgedVerbatimToObjectiveC(...)
  34. isUniquelyReferenced(...)
  35. join(...)
  36. lexicographicalCompare(...)
  37. map(...)
  38. max(...)
  39. maxElement(...)
  40. min(...)
  41. minElement(...)
  42. numericCast(...)
  43. partition(...)
  44. posix_read(...)
  45. posix_write(...)
  46. print(...)
  47. println(...)
  48. quickSort(...)
  49. reduce(...)
  50. reflect(...)
  51. reinterpretCast(...)
  52. reverse(...)
  53. roundUpToAlignment(...)
  54. sizeof(...)
  55. sizeofValue(...)
  56. sort(...)
  57. split(...)
  58. startsWith(...)
  59. strideof(...)
  60. strideofValue(...)
  61. swap(...)
  62. swift_MagicMirrorData_summaryImpl(...)
  63. swift_bufferAllocate(...)
  64. swift_keepAlive(...)
  65. toString(...)
  66. transcode(...)
  67. underestimateCount(...)
  68. unsafeReflect(...)
  69. withExtendedLifetime(...)
  70. withObjectAtPlusZero(...)
  71. withUnsafePointer(...)
  72. withUnsafePointerToObject(...)
  73. withUnsafePointers(...)
  74. withVaList(...)