美文网首页
Swift基础学习2(函数和闭包)

Swift基础学习2(函数和闭包)

作者: PittWong | 来源:发表于2016-06-27 15:07 被阅读5次

函数

swift中函数与C语言中函数表现形式上没有太大区别,同时内外部参数的表现形式与OC逻辑相同,微小差异 : 元组概念为swift函数提供了多返回值的便捷使用方式

内外参数分别声明

func test(num1 num:Int) -> (Int) {
        return num * 100 // 内参数是num
    }

var value = test(num1: 100)  //调用时用外参数

普通函数表现形式---未标注内外参数时默认相同
此种形式在原来版本需要在内参数前加上# 表明内外参数名相同

//定义一个函数,注意参数和返回值,如果没有返回值可以不写返回值或者写成Void、空元组()(注意Void的本质就是空元组)
func sum(num1:Int,num2:Int)->Int{
    return num1 + num2
}

let value = sum(num1: 23, num2: 42)//函数的调用

有默认值的函数

func sum(num1:Int,num2:Int = 100)->Int{
    return num1 + num2
}
let value = sum(num1: 23)
let value = sum(num1: 23, num2: 42)

可变参数,一个函数最多有一个可变参数并且作为最后一个参数

下面strings参数在内部是一个[String],对于外部是不定个数的String参数

func joinStr(seperator:Character=",",strings:String...)->String{
    var result:String=""
    for var i=0;i<strings.count;++i{
        if i != 0{
            result.append(seperator)
        }
        result+=strings[i]
    }
    return result
}
 
joinStr(seperator:" ", "hello","world","!") //结果:"hello world !"

默认内参数为let类型,如果需要变化需要用var

func sum(num1:Int,num2:Int = 100)->Int{
    var num1 = num1 //默认内参数为let类型,如果需要变化需要用var
    num1 += 1
    return num1 + num2
}

inout参数 : 内部可以改变外部参数 (调用时候必须传入变量)

func inoutTest(inout num1: Int) -> () {  //swift3.0之前写法
        
    }
func inoutTest(num1:inout Int) -> () {  //3.0以后写法
        
    }

作为参数和返回值

var sum3=sum //自动推断sum3的类型:(Int,Int)->Int,注意不同的函数类型之间不能直接赋值
sum3(1,2) //结果:3
 
//函数作为返回值
func fn()->(Int,Int)->Int{
    //下面的函数是一个嵌套函数,作用于是在fn函数内部
    func minus(a:Int,b:Int)->Int{
        return a-b
    }
    return minus;
}
var minus=fn()
 
//函数作为参数
func caculate(num1:Int,num2:Int,fn:(Int,Int)->Int)->Int{
    return fn(num1,num2)
}
 
caculate(1, 2, sum) //结果:3
caculate(1,2, minus) //结果:-1

闭包

  • 全局函数和嵌套函数也是一种闭包,对于全局函数它不会捕获任何常量或者变量,而对于嵌套函数则可以捕获其所在函数的常量或者变量。
  • 通常我们说的闭包更多的指的是闭包表达式,也就是没有函数名称的代码块,因此也称为匿名闭包。
  • 简化使用形式称之为尾随闭包
func caculate(num1:Int,num2:Int,fn:(Int,Int)->Int)->Int{
    return fn(num1,num2)
}

caculate(a, b, {(num1:Int,num2:Int)->Int in
    return num1 - num2
}) 
//常用以下方式来使用,称之为`尾随闭包`
//再次简化,使用参数名缩写,使用$0...$n代表第n个参数,并且此in关键字也省略了
caculate(a, b, {
    return $0 - $1
})

相关文章

  • Swift 基本语法(函数, 闭包)

    前言 接上篇, 这篇聊一下 Swift中的 函数, 闭包 一 函数 二 闭包 Swift 基础 先介绍三篇, ...

  • Swift基础学习2(函数和闭包)

    函数 swift中函数与C语言中函数表现形式上没有太大区别,同时内外部参数的表现形式与OC逻辑相同,微小差异 : ...

  • swift学习笔记 ⑥ —— 闭包

    Swift学习笔记 - 文集 闭包,就是能够读取其他函数内部变量的函数。Swift 中的闭包与 C 和 OC 中的...

  • Swift学习笔记(1)

    SWift学习笔记 闭包 闭包表达式 闭包是自包含的函数代码块,可以在代码中被传递和使用。Swift 中的闭包与 ...

  • Swift-闭包

    Swift 闭包 函数 ()->() Swift 中的闭包和 Objective-C 中的 block 类似,闭包...

  • Swift3.0_闭包(Closure)

    闭包基础 ** 闭包是自包含的函数代码块,可以在代码中被传递和使用。Swift 中的闭包与 C 和 Objecti...

  • 托XX福写个Swift闭包教程

    闭包基础知识 Swift闭包和OC的block类似不过还是有点区别 OC的block是一个匿名函数 Swift 中...

  • Swift闭包和函数

    函数在Swift中只是一种特殊的闭包,闭包在Swift语言中是一等公民,支持闭包嵌套和闭包传递。Swift中的闭包...

  • swift4 闭包

    swift 闭包 闭包:swift 中 函数是闭包的一种类似于oc的闭包闭包表达式(匿名函数) -- 能够捕获上下...

  • 再次学习 Swift 闭包

    Swift 闭包 1. 什么是闭包? 闭包是自包含的函数代码块,可以在代码中被传递和使用。 2. 闭包能做什么? ...

网友评论

      本文标题:Swift基础学习2(函数和闭包)

      本文链接:https://www.haomeiwen.com/subject/layzdttx.html