博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Swift 函数
阅读量:4538 次
发布时间:2019-06-08

本文共 3949 字,大约阅读时间需要 13 分钟。

1、函数的定义

func test() ->Void{    print("test")}func test() {    print("test")}func test() ->(){    print("test")}
func pi() -> Double {    return 3.14}
 

2、隐式返回

func sum (v1 :Int , v2: Int) -> Int{    return v1+v2;}//形参默认是let 也只能是letfunc sum (v1 :Int , v2: Int) -> Int{     v1+v2;}

3、元组返回、实现多返回值

func calcute(v1 :Int , v2: Int) ->(sum:Int,cha:Int,avg:Double){    return (v1+v2,v1-v2,Double((v1+v2))/2.0)}print(calcute(v1: 2, v2: 3))print(calcute(v1: 2, v2: 3).sum)print(calcute(v1: 2, v2: 3).cha)print(calcute(v1: 2, v2: 3).avg)

4、参数标签

func gotoWork( time:Int) ->(){    print("gotoWork:\(time)点")}//参数标签func gotoWork(at time:Int) ->(){    print("gotoWork:\(time)点")}gotoWork(at: 8)//使用下划线省略参数标签func sum (_ v1 :Int ,_ v2: Int) -> Int{    return v1+v2;}print(sum(3, 3))

5、默认参数值

func person (name : String="nobody" , age: Int = 50 ,weight:Double) {    print("name:\(name)  age\(age)  weight:\(weight)")}person(name: "jack", age: 18, weight: 99.5)person(weight: 33)person(name: "tom", weight: 12)// 输出//name:jack  age18  weight:99.5//name:nobody  age50  weight:33.0//name:tom  age50  weight:12.0

6、可变参数

func sum (numbers : Int...)->(Int){    var s = 0        for i in numbers {        s+=i    }    return s}print(sum(numbers: 1,2,3,4))  //10// 注意 一个函数只有有一个可变参数 并且紧跟着的第一个 参数标签不能省略func test (numbers: Int... , name:String ,_ age :Int){    print("number:\(numbers) name:\(name) age:\(age)")}test(numbers: 1,3,5, name: "jack", 20)//输出 number:[1, 3, 5] name:jack age:20

7、Swift 自带的 print 函数

/// - Parameters:///   - items: Zero or more items to print.///   - separator: A string to print between each item. The default is a single///     space (`" "`).///   - terminator: The string to print after all items have been printed. The///     default is a newline (`"\n"`).//public func print(_ items: Any..., separator: String = " ", terminator: String = "\n")// separator 元素分割符  terminator 结尾符号print(1,2,3,4, separator: "--", terminator: "..")print(8,9,10, separator: "--", terminator: "..")//输出 1--2--3--4..8--9--10..

8、 inout

可以用inout定义一个输入输出参数:可以在函数内部修改外部实参的值

可变参数不能标记为inout

 inout参数不能有默认值

inout参数的本质是地址传递(引用传递)

inout参数只能传入可以被多次赋值的

func swapValue(v1 : inout Int,v2 : inout Int){    let t = v1;    v1=v2;    v2=t;}var a = 10var b = 20swapValue(v1: &a, v2: &b)print("a\(a)==b\(b)")swap(&a, &b)print("a\(a)==b\(b)")

9、函数重载

//规则  函数名相同  参数类型不同、参数标签不同func sum (a:Int,b:Int){}func sum (a:Float,b:Int){    }func sum (a:Int,b:Float){    }func sum (a:Int,b:Int,c:Int){    }

 

//函数重载于返回值无关//默认参数与函数重载参数冲突时func sum (a:Int,b:Int,d:Int=20){    }sum(a: 2, b: 2) //调用 func sum (a:Int,b:Int){}//可变参数 省略参数标签、与函数重载产生二义性时 、编译器会报错 Ambiguous use of 'sum‘func sum (_ a:Int,_ b:Int){    }func sum (_ numbers:Int...){    }sum(1,2)

10、函数类型

func sum(v1:Int,v2:Int) -> Int {    v1+v2}//定义变量var fun:(Int,Int)->Int = sum//调用时不需要带参数标签print(fun(1,33))//函数类型作为函数参数func sum(v1:Int,v2:Int) -> Int {   return v1+v2}func difference(_ v1:Int,_ v2:Int)->Int{ return  v1-v2}func calcute (_ result:(Int,Int)->Int ,v1:Int ,v2:Int){        print(result(v1,v2))}calcute(sum(v1:v2:), v1: 1, v2: 9) //10calcute(difference(_:_:), v1: 9, v2: 3) //6
//函数类型昨晚函数返回值func prefious(_ input:Int)->Int{    input-1}func next(_ input:Int)->Int{    input+1}func foward(isNext:Bool)->(Int)->Int{    isNext ? next : prefious}print( foward(isNext: false)(9)) //8

11、 typealias用来给类型 起别名

typealias date = (year:Int,month:Int,day:Int)func test(d:date){    print(d.year)    print(d.1)    print(d.day)}test(d: (1,2,3))typealias Byte = Int8typealias Intfn = (Int,Int)->Intfunc diff(v1:Int,v2:Int) -> Int {    v1-v2}let fn:Intfn=diffprint(fn(30,2)) //28//按照swift的标准定义void就是空元组  public typealias Void = ()

12、嵌套函数 将函数定义在函数内部

func foward(isNext:Bool)->(Int)->Int{    func prefious(_ input:Int)->Int{        input-1    }    func next(_ input:Int)->Int{        input+1    }  return  isNext ? next : prefious}print(foward(isNext: true)(11)) //12print(foward(isNext: false)(8)) //7

 

转载于:https://www.cnblogs.com/ZhangShengjie/p/11322862.html

你可能感兴趣的文章
枚举也能直接转换为对应的数值输出
查看>>
angularjs1-7,供应商
查看>>
BitSet
查看>>
Spring常用注解,自动扫描装配Bean
查看>>
(转载)深入理解WeakHashmap
查看>>
JAVA中的数组
查看>>
爬虫—使用Requests
查看>>
scrollIntoView()窗口滚动
查看>>
No toolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android
查看>>
使用ansible远程管理集群
查看>>
读jQuery源码释疑笔记3
查看>>
手把手教你jmeter压测--适合入门
查看>>
Sequelize+MySQL存储emoji表情
查看>>
RabbitMQ学习之Publish/Subscribe(3)
查看>>
[SCOI2010]生成字符串
查看>>
JLOI2015 城池攻占
查看>>
在 Azure 虚拟机上快速搭建 MongoDB 集群
查看>>
跑步运动软件调研
查看>>
搭建ntp时间服务器 ntp - (Network Time Protocol)
查看>>
35. Search Insert Position
查看>>