查看: 5018|回复: 0

[手机开发] 常用的 74个内置函数

发表于 2018-2-21 08:00:04
  1. 1 // MARK: 1.断言 assert,参数如果为ture则继续,否则抛出异常
  2. 2 let number = 3
  3. 3
  4. 4 //第一个参数为判断条件,第二各参数为条件不满足时的打印信息
  5. 5 assert(number >= 3,"number 不大于 3")
  6. 6
  7. 7 //如果断言被处罚(number <= 3),将会强制结束程序,并打印相关信息
  8. 8 // assertion failed: number 不大于 3
  9. 9 // 断言可以引发程序终止,主要用于调试阶段。比如下面的情况:
  10. 10 /*
  11. 11 * 自定义整形数组索引越界问题
  12. 12 * 向函数传值,无效值引发函数不能完成相应任务
  13. 13 * Optional类型数据为nil值,引发的程序crash
  14. 14 */
  15. 15
  16. 16 // MARK: 2.获取序列的元素个数 characters.count (countElements)
  17. 17 let str = "foo"
  18. 18
  19. 19 //打印元素个数
  20. 20 print("count == \(str.characters.count)")
  21. 21 //打印结果
  22. 22 // count == 3
  23. 23
  24. 24 // MARK: 3.返回最大最小值min(),max()
  25. 25 max(10, 20)
  26. 26 min(1, 3, 5, 9, 8)
  27. 27
  28. 28 // MARK: 4.排序 sorted (sort)
  29. 29 let ary = ["B", "A", "C"]
  30. 30
  31. 31 //默认排序(升序)
  32. 32 let ary1 = ary.sorted()
  33. 33 print(ary1)
  34. 34 //打印结果
  35. 35 // ["A", "B", "C"]
  36. 36
  37. 37 //自定义排序(降序)
  38. 38 let ary2 = ary.sorted {
  39. 39 // $1 < $0
  40. 40 $0.1 < $0.0
  41. 41 }
  42. 42 print(ary2)
  43. 43 //打印结果
  44. 44 // ["C", "B", "A"]
  45. 45 // 可以看出,可以用0、1、2来表示调用闭包中参数,0指代第一个参数,1指代第二个参数,2指代第三个参数,以此类推n+1指代第n个参数,后的数字代表参数的位置,一一对应。
  46. 46
  47. 47 // MARK: 5.map函数
  48. 48 let arr = [2,1,3]
  49. 49
  50. 50 //数组元素进行2倍放大
  51. 51 let doubleArr = arr.map {$0 * 2}
  52. 52 print(doubleArr)
  53. 53 //打印结果
  54. 54 //[4, 2, 6]
  55. 55
  56. 56 //数组Int转String
  57. 57 let moneyArr = arr.map { "¥\($0 * 2)"}
  58. 58 print(moneyArr)
  59. 59 //打印结果
  60. 60 //["¥4", "¥2", "¥6"]
  61. 61
  62. 62 //数组转成元组
  63. 63 let groupArr = arr.map {($0, "\($0)")}
  64. 64 print(groupArr)
  65. 65 //打印结果
  66. 66 //[(2, "2"), (1, "1"), (3, "3")]
  67. 67
  68. 68 // map(sequence, transformClosure): 如果transformClosure适用于所给序列中所有的元素,则返回一个新序列。
  69. 69
  70. 70 // MARK: 6.flapMap函数
  71. 71 let flapMap_ary = [["B", "A", "C"],["1","5"]]
  72. 72
  73. 73 //flapMap函数会降低维度
  74. 74 //flapMap_ary.flatMap(<#T##transform: (Array<String>) throws -> ElementOfResult?##(Array<String>) throws -> ElementOfResult?#>)
  75. 75 let flapMapAry = flapMap_ary.flatMap{$0}
  76. 76 print(flapMapAry)
  77. 77 //打印结果
  78. 78 //["B", "A", "C", "1", "5"] // 二维数组变成了一维
  79. 79
  80. 80 // MARK: 7.筛选函数filter
  81. 81 let numbers = [1, 2, 3, 4, 5, 6]
  82. 82
  83. 83 //获取偶数值
  84. 84 let evens = numbers.filter{$0 % 2 == 0}
  85. 85 print(evens)
  86. 86 //打印结果
  87. 87 //[2, 4, 6]
  88. 88
  89. 89 // MARK: 8.reduce函数
  90. 90 let arr_reduce = [1, 2, 4,]
  91. 91
  92. 92 //对数组各元素求和
  93. 93 let sum = arr_reduce.reduce(0) {$0 + $1}
  94. 94 print(sum)
  95. 95 //打印结果
  96. 96 //7
  97. 97 //arr_reduce.reduce(<#T##initialResult: Result##Result#>, <#T##nextPartialResult: (Result, Int) throws -> Result##(Result, Int) throws -> Result#>)
  98. 98 //对数组各元素求积
  99. 99 let product = arr_reduce.reduce(1) {$0 * $1}
  100. 100 print(product)
  101. 101 //打印结果
  102. 102 //8
  103. 103
  104. 104 // MARK: 9.dump(object): 一个对象的内容转储到标准输出
  105. 105 dump(arr_reduce)
  106. 106
  107. 107 /*
  108. 108
  109. 109 ? 3 elements
  110. 110 - 1
  111. 111 - 2
  112. 112 - 4
  113. 113
  114. 114 */
  115. 115 // MARK: 10.indices(sequence): 在指定的序列中返回元素的索引(零索引)
  116. 116 for i in arr_reduce.indices {
  117. 117 print(i)
  118. 118 // 0 1 2
  119. 119 }
  120. 120
  121. 121 // MARK: 11.一些在编程中经常会用到的函数
  122. 122 abs(-1) == 1 //获取绝对值
  123. 123 ["1","6","4"].contains("2") == false //判断序列是否包含元素
  124. 124 ["a","b"].dropLast() == ["a"] //剔除最后一个元素
  125. 125 ["a","b"].dropFirst() == ["b"] //剔除第一个元素
  126. 126 ["a","b"].elementsEqual(["b","a"]) == false //判断序列是否相同
  127. 127 ["a","b"].indices == 0..<2 //获取index(indices是index的复数)
  128. 128 ["A", "B", "C"].joined(separator: ":") == "A:B:C" //将序列以分隔符串联起来成为字符串
  129. 129 Array([2, 7, 0].reversed()) == [0, 7, 2] //逆序,注意返回的并非原类型序列
  130. 130
  131. 131 // MARK: 常用的 74 个函数
  132. 132 /*
  133. 133
  134. 134 abs(...)
  135. 135 advance(...)
  136. 136 alignof(...)
  137. 137 alignofValue(...)
  138. 138 assert(...)
  139. 139 bridgeFromObjectiveC(...)
  140. 140 bridgeFromObjectiveCUnconditional(...)
  141. 141 bridgeToObjectiveC(...)
  142. 142 bridgeToObjectiveCUnconditional(...)
  143. 143 c_malloc_size(...)
  144. 144 c_memcpy(...)
  145. 145 c_putchar(...)
  146. 146 contains(...)
  147. 147 count(...)
  148. 148 countElements(...)
  149. 149 countLeadingZeros(...)
  150. 150 debugPrint(...)
  151. 151 debugPrintln(...)
  152. 152 distance(...)
  153. 153 dropFirst(...)
  154. 154 dropLast(...)
  155. 155 dump(...)
  156. 156 encodeBitsAsWords(...)
  157. 157 enumerate(...)
  158. 158 equal(...)
  159. 159 filter(...)
  160. 160 find(...)
  161. 161 getBridgedObjectiveCType(...)
  162. 162 getVaList(...)
  163. 163 indices(...)
  164. 164 insertionSort(...)
  165. 165 isBridgedToObjectiveC(...)
  166. 166 isBridgedVerbatimToObjectiveC(...)
  167. 167 isUniquelyReferenced(...)
  168. 168 join(...)
  169. 169 lexicographicalCompare(...)
  170. 170 map(...)
  171. 171 max(...)
  172. 172 maxElement(...)
  173. 173 min(...)
  174. 174 minElement(...)
  175. 175 numericCast(...)
  176. 176 partition(...)
  177. 177 posix_read(...)
  178. 178 posix_write(...)
  179. 179 print(...)
  180. 180 println(...)
  181. 181 quickSort(...)
  182. 182 reduce(...)
  183. 183 reflect(...)
  184. 184 reinterpretCast(...)
  185. 185 reverse(...)
  186. 186 roundUpToAlignment(...)
  187. 187 sizeof(...)
  188. 188 sizeofValue(...)
  189. 189 sort(...)
  190. 190 split(...)
  191. 191 startsWith(...)
  192. 192 strideof(...)
  193. 193 strideofValue(...)
  194. 194 swap(...)
  195. 195 swift_MagicMirrorData_summaryImpl(...)
  196. 196 swift_bufferAllocate(...)
  197. 197 swift_keepAlive(...)
  198. 198 toString(...)
  199. 199 transcode(...)
  200. 200 underestimateCount(...)
  201. 201 unsafeReflect(...)
  202. 202 withExtendedLifetime(...)
  203. 203 withObjectAtPlusZero(...)
  204. 204 withUnsafePointer(...)
  205. 205 withUnsafePointerToObject(...)
  206. 206 withUnsafePointers(...)
  207. 207 withVaList(...)
  208. 208
  209. 209 */
复制代码



回复

使用道具 举报