[Swift通天遁地]五、高级扩展-(6)对基本类型:Int、String、Array、Dictionary、Date的扩展

[Swift通天遁地]五、高级扩展-(6)对基本类型:Int、String、Array、Dictionary、Date的扩展,第1张

概述本文将演示对基本类型:Int、String、Array、Dictionary、Date的扩展。 首先确保在项目中已经安装了所需的第三方库。 点击【Podfile】,查看安装配置文件。 1 platform :ios, ‘12.0‘2 use_frameworks!3 4 target ‘DemoApp‘ do5 source ‘https://github.com/Coco

本文将演示对基本类型:Int、String、Array、Dictionary、Date的扩展。

首先确保在项目中已经安装了所需的第三方库。

点击【Podfile】,查看安装配置文件。

1 platform :ios,12.02 use_frameworks!3 4 target DemoApp do5     source https://github.com/CocoaPods/Specs.git6     pod EZSwiftExtensions7 end

根据配置文件中的相关配置,安装第三方库。

然后点击打开【DemoApp.xcworkspace】项目文件。

在项目导航区,打开视图控制器的代码文件【VIEwController.swift】

现在开始编写代码,对基本类型: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 = -33103         //通过扩展属性,检测是否为偶数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.range116         {117             print("index:\(index)")118         }119         120         //初始化一个无符号的整数121         let someUInt: UInt = 3122         //将其转化为整数123         let myInt = someUInt.toInt124         125         //整数转换为双精度126         print("myInt.todouble:\(myInt.todouble)")127         //整数转换为浮点128         print("myInt.tofloat:\(myInt.tofloat)")129         //整数转换为CGfloat130         //需要兼容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 = "[email protected]"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,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 += attrStr2248         249         //初始化一个标签对象,并设置标签的显示区域 250         let label = UILabel(frame: CGRect(x: 20,y: 40,wIDth: 280,height: 200))251         //设置标签对象可以显示多行文字252         label.numberOflines = 0253         //将可变字符串赋予标签对象254         label.attributedText = attrStr1255         //将标签对象添加到根视图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","squirtle","charmander"]268         print("myArray2.indexesOf(charmander):\(myArray2.indexesOf("charmander"))")269         270         //初始化一个数组对象,271         //假如某个数组拥有多个相同的元素,获得最后一个对象所在的索引位置272         let myArray3 = ["charmander","charmander"]273         print("myArray3.lastIndexOf(charmander):\(String(describing: myArray3.lastIndexOf("charmander")))")274         275         //初始化一个数组对象,删除数组中的指定元素276         var myArray4 = ["charmander","squirtle"]277         myArray4.removeObject("charmander")278         print("myArray4:\(myArray4)")279         280         //初始化一个数组对象,判断是否包含某个实例281         let myArray5 = ["charmander","squirtle"]282         print("myArray5.containsInstanceOf:\(myArray5.containsInstanceOf("charmander"))")283         print("myArray5.containsInstanceOf(1):\(myArray5.containsInstanceOf(1))")284         285         //初始化一个数组对象,判断是否包含另一个数组中的所有元素286         let myArray6 = ["charmander","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",1,2,3] as [Any]293         //将数组中的所有元素随机排序。294         //更改数组中各位元素的位置。295         myArray7.shuffle()296         print("myArray7:\(myArray7)")297         298         //初始化一个数组对象,将一个新的元素插入到数组中的首位。299         var myArray8 = ["charmander","squirtle"]300         myArray8.insertAsFirst("snorlax")301         print("myArray8:\(myArray8)")302         303         //初始化一个数组对象,304         let myArray9 = ["charmander","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","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","squirtle": "water"]325         print("myDict2.random():\(myDict2.random())")326         327         //初始化另外两个字典对象328         var dict1 = ["charmander" : "fire"]329         let dict2 = ["squirtle" : "water"]330         331         //初始化一个字典对象,拼接两个字典对象332         dict1 += dict2333         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         { () -> () in409             print("Prints this 2 seconds later in main queue")410         }411 412         //在此创建一个延迟两秒,然后在“子线程”执行的动作。413         Timer.runThisAfterDelay(seconds: 2,queue: dispatchQueue.global())414         { () -> () in415             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 }
总结

以上是内存溢出为你收集整理的[Swift通天遁地]五、高级扩展-(6)对基本类型:Int、String、Array、Dictionary、Date的扩展全部内容,希望文章能够帮你解决[Swift通天遁地]五、高级扩展-(6)对基本类型:Int、String、Array、Dictionary、Date的扩展所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1021079.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-23
下一篇2022-05-23

发表评论

登录后才能评论

评论列表(0条)

    保存