![[Swift通天遁地]五、高级扩展-(6)对基本类型:Int、String、Array、Dictionary、Date的扩展,第1张 [Swift通天遁地]五、高级扩展-(6)对基本类型:Int、String、Array、Dictionary、Date的扩展,第1张](/aiimages/%5BSwift%E9%80%9A%E5%A4%A9%E9%81%81%E5%9C%B0%5D%E4%BA%94%E3%80%81%E9%AB%98%E7%BA%A7%E6%89%A9%E5%B1%95-%286%29%E5%AF%B9%E5%9F%BA%E6%9C%AC%E7%B1%BB%E5%9E%8B%EF%BC%9AInt%E3%80%81String%E3%80%81Array%E3%80%81Dictionary%E3%80%81Date%E7%9A%84%E6%89%A9%E5%B1%95.png)
本文将演示对基本类型:Int、String、Array、Dictionary、Date的扩展。
首先确保在项目中已经安装了所需的第三方库。
点击【Podfile】,查看安装配置文件。
1 platform :ios,‘12.0‘2 use_frameworks!3 4 target ‘DemoApp‘ do5 source ‘https://github.com/CocoaPods/Specs.git‘6 pod ‘EZSwiftExtensions‘7 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的扩展所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)