iOS开发之Swift中的函数、断言、枚举等
白羽 2018-06-22 来源 :网络 阅读 1000 评论 0

摘要:本文将带你了解iOS开发之Swift中的函数、断言、枚举等,希望本文对大家学IOS有所帮助。


函数与方法、枚举等的书写格式与用法较OC还是变化很大的。

一、函数
1.1 无返回值, 无形参
[javascript] view plain copy
1. func myTest2(){  
2.     println("Hello")  
3. }  
1.2 有返回值,有形参
[javascript] view plain copy
1. func myTest1( num1:Int , num2:Int ) -> String{  
2.     return String(num1 + num2)  
3. }  
1.3 外部参数. (相当于给参数起了个别名,方便识别记忆)
[javascript] view plain copy
1. func myTest3 (myNum1 num1 :Int ,myNum2 num2: Int){  
2.     println(num1 + num2)  
3. }  
4. myTest3(myNum1: 1, myNum2: 2) //调用  
5.   
6. func myTest4 (#num1 :Int ,#num2: Int){   //前面加#表示直接用形参名作为外部参数名  
7.     println(num1 + num2)  
8. }  
9. myTest4(num1: 2, num2: 3)  
1.4 默认参数. (类似C++)
[javascript] view plain copy
1. func myTest5(num1:Int , num2:Int = 10){  
2.     println(num1+num2)  
3. }  
4. myTest5(1)  
5. myTest5(1, num2: 22)    //后面一个参数默认是以形参为外部参数名的  
6.   
7. func myTest6(num1:Int , _ num2:Int = 10){   //忽略形参的外部参数名, 在参数前加_  
8.     println(num1+num2)  
9. }  
10. myTest6(1, 22)  
1.5 常量与变量参数. (默认情况下,Swift的参数都是常量参数,是不能修改的)
[javascript] view plain copy
1. //其他语言中, 如C语言是没有这个概念的. 可以随意修改  
2. func myTest7(let num1:Int, num2:Int){  
3. //    num2 = 10   //这句是错误的, 不能修改  
4.     println(num1+num2)  
5. }  
6.   
7. func myTest8(var num1:Int, num2:Int){  //加上var即可, 变为变量参数. 可以修改  
8.     num1 = 10  
9.     println(num1+num2)  
10. }  
1.6 输入输出参数inout(作用类似于C语言中的指针)
[javascript] view plain copy
1. //经典的交换函数  
2. func swap(inout num1:Int ,inout num2:Int){  //在参数前加inout即可  
3.     var tmp = num1  
4.     num1 = num2  
5.     num2 = tmp  
6. }  
7.   
8. var n1 = 10;  
9. var n2 = 11;  
10. swap(&n1, &n2)  //加上类似C语言的取地址符号&  
11. println("n1 = \(n1), n2 = \(n2)")  
 
1.7 函数类型. (函数也看做是数据类型的一种,可以当参数,定义变量, 作为返回值等)
[javascript] view plain copy
1. //注意:定义变量时不写的类型的话, 默认会自动判断类型. 当再次使用该变量时, 一定要注意类型匹配的问题  
2. //如上面1.2中函数myTest1的类型即为 (Int , Int) -> String  
3. var myFun1 = myTest1   //变量myFun的类型为(Int , Int) -> String  
4. myFun1(10,10)    //结果为20  
5.   
6. func myFun2(fun:(Int,Int)->String , num1:Int , num2:Int){//函数作为参数  
7.     println(fun(num1 , num2))  
8. }  
9. myFun2(myFun1, 11, 11)  
10. //同理,函数还可以作为返回值  
 
1.8 函数重载(和Java差不多,只是Java中与返回值无关)
[javascript] view plain copy
1. func testOverload(num1:Int){  
2.     println("...")  
3. }  
4.   
5. func testOverload(num1:Int , num2:Int) ->Double{  
6.     println("...")  
7.     return 0.1  
8. }  
9.   
10. func testOverload(num1:Int , num2:Int) -> Int{  
11.     println("...")  
12.     return num1 + num2  
13. }  
14.   
15. testOverload(10)  
16. var dou:Double = testOverload(10,11)   //一定要找个接收的具体类型来唯一标识  
 
1.9 嵌套函数. (嵌套函数的作用域仅限于函数内部)
[javascript] view plain copy
1. func doSomething(num:Int){  
2.     func walk(){  println("working!") }  
3.     func eat(){ println("eating") }  
4.       
5.     if num == 1{  
6.         walk()  
7.     }else{  
8.         eat()  
9.     }  
10. }  
11.   
12. doSomething(1)  
13. doSomething(2)  
14. //eat()    //不能直接在外面调用  
 
二、断言
和C语言基本一样,没什么好说的
[cpp] view plain copy
1. var a = 10  
2. assert(a>5, "Right")  
三、枚举
不会像C语言中一样,默认会被赋值为0,1。。。
3.1枚举格式
[cpp] view plain copy
1. enum CompassPoint{  
2.     case North    //case表示新的一行成员被定义  
3.     case South  
4.     case East  
5.     case West  
6.     case A, B, C   //多个成员也可以出现在同一行上  
7. }  
 
3.2 访问枚举
[cpp] view plain copy
1. var direct = CompassPoint.North  
2. direct = .South       //因为前面访问过, 后面自动推断. 可不写枚举名  
3. //CompassPoint.A  
 
3.3 枚举结合Switch使用
[cpp] view plain copy
1. switch direct{  
2. case .North:  
3.     println("Lots of planets have a north")  
4. case .South:  
5.     println("Watch out for penguins")  
6. case .East:  
7.     println("Where the sun rises")  
8. case .West:  
9.     println("Where the skies are blue")  
10. default:  
11.     println("OK")  
12. }  
3.4 关联枚举. 可关联变化的值
[cpp] view plain copy
1. enum Barcode{  
2.     case UPCA(Int,Int,Int)  //关联了3个参数  
3.     case QRCode(String)    //关联了一个字符串  
4. }  
5. //  
6. var productBarcode = Barcode.UPCA(0, 1, 2)   //这样使用, 关联了3个数.  
 
3.5 枚举原始值.
[cpp] view plain copy
1. enum MyASCII : Character{   //定义类型了  
2.     case Tab = "\t"  
3.     case LineFeed = "\n"  
4. }  
5.   
6. enum Planet: Int {  
7.     case Mercury = 1, Venus, Earth, Mars, Jupite, Saturn, Uranus, Neptune  
8. }  
9. //使用toRaw方法可以访问枚举的原始值  
10. println(Planet.Venus.toRaw())   //值为2, 这个自动递增  
11. //使用fromRaw可找到原始的枚举成员  
12. println(Planet.fromRaw(2))   //返回的是可选的类型, 意味着不一定存在  
评价:为旧东西增加了新功能,简化了OC中函数的写法。对于用惯了OC的还是稍有不适应。

 


 


本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之IOS频道!


本文由 @白羽 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程