[Swift通天遁地]5、高級擴展-(6)對基本類型:Int、String、Array、Dictionary、Date的擴展

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公衆號:山青詠芝(shanqingyongzhi)
➤博客園地址:山青詠芝(https://www.cnblogs.com/strengthen/
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:http://www.javashuo.com/article/p-hrkoosud-ky.html 
➤若是連接不是山青詠芝的博客園地址,則多是爬取做者的文章。
➤原文已修改更新!強烈建議點擊原文地址閱讀!支持做者!支持原創!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★php

目錄:[Swift]通天遁地Swifthtml

本文將演示對基本類型:Int、String、Array、Dictionary、Date的擴展。ios

首先確保在項目中已經安裝了所需的第三方庫。git

點擊【Podfile】,查看安裝配置文件。angularjs

1 platform :ios, '12.0'
2 use_frameworks!
3 
4 target 'DemoApp' do
5     source 'https://github.com/CocoaPods/Specs.git'
6     pod 'EZSwiftExtensions'
7 end

根據配置文件中的相關配置,安裝第三方庫。github

而後點擊打開【DemoApp.xcworkspace】項目文件。swift

在項目導航區,打開視圖控制器的代碼文件【ViewController.swift】api

如今開始編寫代碼,對基本類型:Int、String、Array、Dictionary、Date擴展。數組

  1 import UIKit
  2 //在當前的類文件中,引入已經安裝的第三方類庫
  3 import EZSwiftExtensions
  4 
  5 class ViewController: UIViewController {
  6 
  7     override func viewDidLoad() {
  8         super.viewDidLoad()
  9         // Do any additional setup after loading the view, typically from a nib.
 10 
 11         //得到設備的各類信息
 12         eZFunctions()
 13         //對視圖控制器和其餘基本類型進行擴展
 14         extensionExample()
 15         //字符串相關的擴展方法
 16         stringExamples()
 17         //可變字符串(NSAttributedString)相關的擴展方法
 18         nSAttributedStringExtensions()
 19         //數組相關的擴展方法
 20         arraryExtension()
 21         //字典相關的擴展方法
 22         dictionaryExample()
 23         //用於日期相關的擴展方法
 24         dateExample()
 25     }
 26     
 27     //添加一個方法,經過擴展方法得到設備的各類信息
 28     func eZFunctions()
 29     {
 30         //獲取版本號
 31         print(ez.appVersion!)
 32         //獲取編譯號
 33         print(ez.appBuild!)
 34         print(ez.appVersionAndBuild!)
 35         
 36         //檢測設備是否處於豎立狀態
 37         if ez.screenOrientation.isPortrait
 38         {
 39             print("Screen orientation is portrait")
 40         }
 41         else
 42         {
 43             //檢測設備是否處於橫放狀態
 44             print("Screen orientation is not portrait")
 45         }
 46         
 47         //輸出屏幕寬度
 48         print(ez.screenWidth)
 49         //輸出屏幕高度
 50         print(ez.screenHeight)
 51         
 52         //輸出狀態欄的高度
 53         print(ez.screenStatusBarHeight)
 54         //輸出屏幕不包含狀態欄的高度
 55         print(ez.screenHeightWithoutStatusBar)
 56         
 57         //第三方庫還提供了一個快速下載網絡圖片的方法
 58         ez.requestImage("http://images.apple.com/v/apple-watch-nike/a/images/overview/features_large.jpg")
 59         {
 60              (image) -> Void in
 61              //網絡圖片下載完成以後,跳轉到主線程,並顯示下載後的圖片
 62             ez.runThisInMainThread { () -> Void in
 63                 //建立一個圖像視圖,用來顯示下載的網絡圖片
 64                 let myImageView = UIImageView(image: image)
 65                 //並將圖像視圖添加到根視圖
 66                 self.view.addSubview(myImageView)
 67             }
 68         }
 69         
 70         //第三方庫對多線程提供了很好的支持,使開發者能夠很方便的建立一個新的線程。
 71         ez.runThisInBackground { () -> () in
 72             print("Runs this in default priority queue")
 73         }
 74         
 75         //經過獲取JSON的方法,能夠訪問服務器的接口,並處理從服務器返回的數據。
 76         ez.requestJSON("http://www.runoob.com/try/angularjs/data/sites.php", success:
 77         { (object) -> Void in
 78             print(object ?? "")
 79         })
 80         //處理服務器接口返回失敗的狀況
 81         { (error) -> Void in
 82             print(error)
 83         }
 84     }
 85     
 86     //添加一個方法,對視圖控制器和其餘基本類型進行擴展
 87     func extensionExample()
 88     {
 89         //初始化 一個視圖控制器對象
 90         let vc = UIViewController()
 91         //在控制檯輸出視圖控制器對象的類名
 92         print("vc.className:\(vc.className)")
 93         //輸出類的名稱字符串
 94         print("UIViewController.className:\(UIViewController.className)")
 95         
 96         //初始化一個布爾遍歷
 97         var myBool: Bool = true
 98         //經過布爾類型的擴展方法,反轉布爾變量的值
 99         print("myBool.toggle():\(myBool.toggle())")
100         
101         //初始化一個整形常量
102         let myNumber = -33
103         //經過擴展屬性,檢測是否爲偶數
104         print("myNumber.isEven:\(myNumber.isEven)")
105         //經過擴展屬性,檢測是否爲奇數
106         print("myNumber.isOdd:\(myNumber.isOdd)")
107         //經過擴展屬性,檢測是否爲正數
108         print("myNumber.isPositive:\(myNumber.isPositive)")
109         //經過擴展屬性,檢測是否爲負數
110         print("myNumber.isNegative:\(myNumber.isNegative)")
111         //得到並輸出某個整數的數字個數
112         print("myNumber.digits:\(myNumber.digits)")
113         
114         //經過數字類型的範圍屬性,能夠快速建立一個循環
115         for index in 5.range
116         {
117             print("index:\(index)")
118         }
119         
120         //初始化一個無符號的整數
121         let someUInt: UInt = 3
122         //將其轉化爲整數
123         let myInt = someUInt.toInt
124         
125         //整數轉換爲雙精度
126         print("myInt.toDouble:\(myInt.toDouble)")
127         //整數轉換爲浮點
128         print("myInt.toFloat:\(myInt.toFloat)")
129         //整數轉換爲CGFloat
130         //須要兼容64位機器的程序而言,須要用CGFloat,
131         print("myInt.toCGFloat:\(myInt.toCGFloat)")
132         //整數轉換爲字符串
133         print("myInt.toString:\(myInt.toString)")
134         //整數轉換爲無符號整形
135         print("myInt.toUInt:\(myInt.toUInt)")
136     }
137 
138     //添加一個方法,用於字符串相關的擴展方法
139     func stringExamples()
140     {
141         //初始化一個內容爲數字的字符串
142         var myString = "33.3"
143         //轉化爲Double類型
144         print("myString.toDouble:\(myString.toDouble)")
145         //轉化爲Int類型
146         print("myString.toInt:\(myString.toInt)")
147         
148         //刪除字符串中的空格和換行符
149         myString.trim()
150         //在控制檯輸出
151         print("myString:\(myString)")
152         
153         //初始化另外一個字符串常量
154         let eZSwiftExtensions = "eZSwiftExtensions"
155         //輸出在字符串中指定位數的字符
156         print("eZSwiftExtensions[2]:\(eZSwiftExtensions[2])")
157         print("eZSwiftExtensions[3]:\(eZSwiftExtensions[3])")
158         //輸出在字符串中指定範圍的字符
159         print("eZSwiftExtensions[2...4]:\(eZSwiftExtensions[2...4])")
160         //得到某個字符在另外一個字符串中的位置
161         print("eZSwiftExtensions.getIndexOf(w):\(eZSwiftExtensions.getIndexOf("w") ?? 0)")
162         
163         //初始化另外一個字符串常量
164         let awesomeString = "eZSwiftExtensions is awesome!"
165         //得到並輸出字符串的長度
166         print("awesomeString.length:\(awesomeString.length)")
167         //輸出首字母大寫的字符串
168         print("awesomeString.capitalized:\(awesomeString.capitalized)")
169         
170         //初始化另外一個字符串常量
171         let awesomeString2 = "eZSwiftExtensions is awesome!"
172         //在字符串中是否包含三個字符串
173         print("awesomeString2.contains(squirtle):\(awesomeString2.contains("squirtle"))")
174         print("awesomeString2.contains(awesome):\(awesomeString2.contains("awesome"))")
175         print("awesomeString2.contains(AWESOME):\(awesomeString2.contains("AWESOME"))")
176         //設置相關的選項,對是否包含字符串進行檢測
177         //這裏設置在檢測字符時,考慮大小寫的不一樣
178         print(awesomeString2.contains("AWESOME", compareOption: NSString.CompareOptions.caseInsensitive))
179         
180         //建立兩個字符串常量
181         let awesomeString3 = "\n    eZSwiftExtensions is awesome!     \n \n "
182         let emptyStr = "   \n \n \n"
183         
184         //檢測字符串是否爲空
185         print("awesomeString3.isBlank:\(awesomeString3.isBlank)")
186         print("emptyStr.isBlank:\(emptyStr.isBlank)")
187         
188         let awesomeString4 = "eZSwiftExtensions is awesome!"
189         let emailStr = "charmander@gmail.com"
190         //檢測字符串是否爲郵箱格式
191         print("awesomeString4.isEmail:\(awesomeString4.isEmail)")
192         print("emailStr.isEmail:\(emailStr.isEmail)")
193         
194         //建立一個字符串常量
195         let urlString = "http://www.google.com is great but www.bd.com not that much"
196         //經過抽取網址列表方法,能夠抽取字符串中的全部網址
197         print("myString.extractURLs:\(myString.extractURLs)")
198         print("emailStr.extractURLs:\(emailStr.extractURLs)")
199         print("urlString.extractURLs:\(urlString.extractURLs)")
200         
201         //建立一個字符串常量
202         let myNumberString = "13"
203         //將字符串轉換爲相應類型
204         print("myNumberString.toInt():\(String(describing: myNumberString.toInt()))")
205         print("myNumberString.toDouble():\(String(describing: myNumberString.toDouble()))")
206         print("myNumberString.toFloat():\(String(describing: myNumberString.toFloat()))")
207         
208         //建立兩個字符串常量
209         let myBoolString = "false"
210         let myOtherString = "hello"
211         //將字符串轉換爲布爾類型
212         print("myBoolString.toBool():\(String(describing: myBoolString.toBool()))")
213         print("myOtherString.toBool():\(String(describing: myOtherString.toBool()))")
214         
215         //建立兩個字符串常量
216         let myStr = "10.5"
217         let myOtherStr = "Legolas"
218         //判斷字符串是否徹底由數字組成
219         print("myStr.isNumber():\(myStr.isNumber())")
220         print("myOtherStr.isNumber():\(myOtherStr.isNumber())")
221         
222         //初始化一個較長的字符串
223         let str = "Like all Apple Watch Series 2 models, Apple Watch Nike+ has built-in GPS to track your pace, distance, and route — even if you don’t have your iPhone with you. With the brightest display Apple has ever made, your metrics are easy to read, no matter how much the sun glares. And Apple Watch Nike+ is rated water resistant 50 meters,* so you can even take a post-run dip in the pool."
224         //統計在字符串中,總共包含了多少個指定的字符串
225         print("str.count:\(str.count("Watch"))")
226     }
227 
228     //添加一個方法,可變字符串(NSAttributedString)相關的擴展方法
229     func nSAttributedStringExtensions()
230     {
231         //初始化一個NSAttributedString常量
232         let str = NSAttributedString(string: "Like all Apple Watch Series 2 models, Apple Watch Nike+ has built-in GPS to track your pace, distance, and route — even if you don’t have your iPhone with you. With the brightest display Apple has ever made, your metrics are easy to read, no matter how much the sun glares. ")
233         
234         //可變字符串擁有多個擴展方法
235         var attrStr1 = str.underline()//下劃線
236                           .bold()//加粗
237                           .italic()//斜體
238                           .color(.orange)//設置顏色爲橙色
239                           //設置自定義樣式的字符範圍
240                           .attributedSubstring(from: NSRange(location: 0, length: 120))
241 
242         //可變字符串擁有多個擴展方法
243         let attrStr2 = str.strikethrough()//添加中心線
244                           //設置自定義樣式的字符範圍
245                           .attributedSubstring(from: NSRange(location: 120, length: str.length-121))
246         //將兩個可變字符串進行拼接
247         attrStr1 += attrStr2
248         
249         //初始化一個標籤對象,並設置標籤的顯示區域 
250         let label = UILabel(frame: CGRect(x: 20, y: 40, width: 280, height: 200))
251         //設置標籤對象能夠顯示多行文字
252         label.numberOfLines = 0
253         //將可變字符串賦予標籤對象
254         label.attributedText = attrStr1
255         //將標籤對象添加到根視圖
256         self.view.addSubview(label)
257     }
258 
259     //添加一個方法,用於數組相關的擴展方法
260     func arraryExtension()
261     {
262         //初始化一個數組對象,而後隨機得到數組中的一個元素
263         let myArray = ["charmander","bulbasaur","squirtle"]
264         print("myArray.random():\(String(describing: myArray.random()))")
265         
266         //初始化一個數組對象,而後得到某個元素在數組中的索引位置
267         let myArray2 = ["charmander","bulbasaur","squirtle","charmander"]
268         print("myArray2.indexesOf(charmander):\(myArray2.indexesOf("charmander"))")
269         
270         //初始化一個數組對象,
271         //假如某個數組擁有多個相同的元素,得到最後一個對象所在的索引位置
272         let myArray3 = ["charmander","bulbasaur","squirtle","charmander"]
273         print("myArray3.lastIndexOf(charmander):\(String(describing: myArray3.lastIndexOf("charmander")))")
274         
275         //初始化一個數組對象,刪除數組中的指定元素
276         var myArray4 = ["charmander","bulbasaur","squirtle"]
277         myArray4.removeObject("charmander")
278         print("myArray4:\(myArray4)")
279         
280         //初始化一個數組對象,判斷是否包含某個實例
281         let myArray5 = ["charmander","bulbasaur","squirtle"]
282         print("myArray5.containsInstanceOf:\(myArray5.containsInstanceOf("charmander"))")
283         print("myArray5.containsInstanceOf(1):\(myArray5.containsInstanceOf(1))")
284         
285         //初始化一個數組對象,判斷是否包含另外一個數組中的全部元素
286         let myArray6 = ["charmander","bulbasaur","squirtle"]
287         print("containsArray([charmander,bulbasaur]):\(myArray6.containsArray(["charmander","bulbasaur"]))")
288          //初始化一個數組對象,判斷是否包含另外一個數組中的元素
289         print("myArray6.containsArray([string]):\(myArray6.containsArray(["string"]))")
290         
291         //初始化一個數組對象,該數組包含字符串和整形兩種類型的元素
292         var myArray7 = ["charmander","bulbasaur","squirtle",1,2,3] as [Any]
293         //將數組中的全部元素隨機排序。
294         //更改數組中各位元素的位置。
295         myArray7.shuffle()
296         print("myArray7:\(myArray7)")
297         
298         //初始化一個數組對象,將一個新的元素插入到數組中的首位。
299         var myArray8 = ["charmander","bulbasaur","squirtle"]
300         myArray8.insertAsFirst("snorlax")
301         print("myArray8:\(myArray8)")
302         
303         //初始化一個數組對象,
304         let myArray9 = ["charmander","bulbasaur","squirtle"]
305         //兩個數組同時擁有的元素,交集
306         print("myArray9.intersection:\(myArray9.intersection(["charmander","pikachu","bulbasaur"]))")
307         //兩個元素的並集
308         print("myArray9.union:\(myArray9.union(["charmander","pikachu"]))")
309         
310         //初始化一個數組對象,兩個數組互不擁有的元素。
311         let myArray10 = ["charmander","bulbasaur","squirtle","pikachu"]
312         print("myArray10.difference:\(myArray10.difference(["charmander","bulbasaur"]))")
313     }
314 
315     //添加一個方法,用於字典相關的擴展方法
316     func dictionaryExample()
317     {
318         //初始化一個字典對象,檢測在字典中是否包含指定的鍵
319         let myDict = ["charmander": "fire","bulbasaur": "grass","squirtle": "water"]
320         print("myDict.has(charmander):\(myDict.has("charmander"))")
321         print("myDict.has(pikachu):\(myDict.has("pikachu"))")
322         
323         //初始化一個字典對象,將字典中的鍵值隨機分佈
324         let myDict2 = ["charmander": "fire","bulbasaur": "grass","squirtle": "water"]
325         print("myDict2.random():\(myDict2.random())")
326         
327         //初始化另外兩個字典對象
328         var dict1 = ["charmander" : "fire"]
329         let dict2 = ["squirtle" : "water"]
330         
331         //初始化一個字典對象,拼接兩個字典對象
332         dict1 += dict2
333         print("dict1:\(dict1)")
334         
335         //初始化另外兩個字典對象
336         let dictionary1 = ["charmander" : "fire", "bulbasaur" : "grass"]
337         let dictionary2 = ["charmander": "fire","squirtle": "water"]
338         
339         //兩個字典對象的交集
340         var dictionary3 = dictionary1.intersection(dictionary2)
341         print("dictionary3:\(dictionary3)")
342         
343         //兩個字典對象的並集
344         dictionary3 = dictionary1.union(dictionary2)
345         print("dictionary3:\(dictionary3)")
346         //兩個字典對象的補集
347         print("dictionary1.difference:\(dictionary1.difference(dictionary1, dictionary2))")
348     }
349     
350     //添加一個方法,用於日期相關的擴展方法
351     func dateExample()
352     {
353         //初始化兩個字符串對象,分別標識日期的格式、日期的值
354         let format = "yyyy/MM/dd"
355         let fromString = "2016/01/11"
356         //輸出格式化後的日期
357         print("Date(fromString: fromString, format: format):\(String(describing: Date(fromString: fromString, format: format)))")
358         
359         //初始化一個日期對象
360         let now = Date()
361         //輸出日期對象轉換成字符串後的內容
362         print("now.toString():\(now.toString())")
363         //經過設置日期和時間格式,能夠將日期對象轉換成指定格式的日期和時間。
364         //日期格式共有五種:無、短、中、長、全
365         print("now.toString(dateStyle: .medium, timeStyle: .medium):\(now.toString(dateStyle: .medium, timeStyle: .medium))")
366         //使用字符串設置日期和時間的格式,
367         //而後將日期轉換成指定格式的內容。
368         print("now.toString(format:yyyy/MM/dd HH:mm:ss):\(now.toString(format: "yyyy/MM/dd HH:mm:ss"))")
369         
370         //初始化另外兩個日期對象
371         let now2 = Date()
372         let later = Date(timeIntervalSinceNow: -100000)
373         //計算兩個日期之間相差的:
374         //天數
375         print("later.daysInBetweenDate(now2):\(later.daysInBetweenDate(now2))")
376         //小時數
377         print("later.hoursInBetweenDate(now2):\(later.hoursInBetweenDate(now2))")
378         //分鐘數
379         print("later.minutesInBetweenDate(now2):\(later.minutesInBetweenDate(now2))")
380         //秒數
381         print("later.secondsInBetweenDate(now2):\(later.secondsInBetweenDate(now2))")
382         
383         //初始化另外一個日期對象,
384         //而後計算該日期距離當前時間已經走過的長度
385         let date1 = Date(timeIntervalSinceNow: -100000)
386         print("date1.timePassed():\(date1.timePassed())")
387         
388         //初始化另外一個日期,並計算時間的流逝
389         let date2 = Date(timeIntervalSinceNow: -10000)
390         print("date2.timePassed():\(date2.timePassed())")
391         
392         //計算第三個日期的時間流逝
393         let date3 = Date(timeIntervalSinceNow: -1000)
394         print("date3.timePassed():\(date3.timePassed())")
395         
396         //初始化另外兩個日期對象
397         let now3 = Date()
398         let now4 = Date()
399         
400         //使用數學符號快速比較兩個日期的大小。
401         print("now3 == now4:\(now3 == now4)")
402         print("now3 < now4:\(now3 < now4)")
403         print("now3 < now4:\(now3 < now4)")
404         
405         //經過時間類能夠快速建立延遲動做
406         //在此建立一個延遲兩秒,而後在「主線程」執行的動做。
407         Timer.runThisAfterDelay(seconds: 2)
408         { () -> () in
409             print("Prints this 2 seconds later in main queue")
410         }
411 
412         //在此建立一個延遲兩秒,而後在「子線程」執行的動做。
413         Timer.runThisAfterDelay(seconds: 2, queue: DispatchQueue.global())
414         { () -> () in
415             print("Prints this 2 seconds later")
416         }
417     }
418 
419     override func didReceiveMemoryWarning() {
420         super.didReceiveMemoryWarning()
421         // Dispose of any resources that can be recreated.
422     }
423 }
相關文章
相關標籤/搜索