美文网首页
Swift函数_6

Swift函数_6

作者: edison0428 | 来源:发表于2017-11-20 10:36 被阅读5次

函数是一段完成特定任务的独立代码片段。你可以通过给函数命名来标识某个函数的功能,这个名字可以被用来在需要的时候"调用"这个函数来完成它的任务。

Swift 统一的函数语法非常的灵活,可以用来表示任何函数,包括从最简单的没有参数名字的 C 风格函数,到复杂的带局部和外部参数名的 Objective-C 风格函数。参数可以提供默认值,以简化函数调用。参数也可以既当做传入参数,也当做传出参数,也就是说,一旦函数执行结束,传入的参数值将被修改。

Swift 中,每个函数都有一个由函数的参数值类型和返回值类型组成的类型。你可以把函数类型当做任何其他普通变量类型一样处理,这样就可以更简单地把函数当做别的函数的参数,也可以从其他函数中返回函数。函数的定义可以写在其他函数定义中,这样可以在嵌套函数范围内实现功能封装

函数的定义与调用
//带参数,带返回值
func sum(x : Int, y : Int) -> Int {
    
    return (x + y)
}

print(sum(x: 10, y: 10))


//带参数,带返回值 元组
func maxAndMin(dataArr : [Int]) -> (maxInt:Int,minInt:Int) {
    
    var currentMin = dataArr[0]
    var currentMax = dataArr[0]
    for value in dataArr[1..<dataArr.count] {
        if value < currentMin {
            currentMin = value
        } else if value > currentMax {
            currentMax = value
        }
    }
    return (currentMin, currentMax)
    
}

print(maxAndMin(dataArr: [5,7,3,4,9,7,1,6]))


//可选返回类型

func max(dataArr : [Int]) -> Int? {
    
    var currentMin = dataArr[0]
    for value in dataArr[1..<dataArr.count] {
        if value < currentMin {
            currentMin = value
        }
    }
    return currentMin
    
}


if let min = max(dataArr: [5,7,3,4,9,7,2,6]){
    
    print(min)
}else{
    print("没有返回有效值")
}


//可选返回类型 元组

func maxAndMinOption(dataArr : [Int]) -> (maxInt:Int,minInt:Int)? {
    
    
    var currentMin = dataArr[0]
    var currentMax = dataArr[0]
    for value in dataArr[1..<dataArr.count] {
        if value < currentMin {
            currentMin = value
        } else if value > currentMax {
            currentMax = value
        }
    }
    return (currentMin, currentMax)
    
}

let dataA:[Int] = [5,7,3,4,9,7,2,6]

if let (maxInt,minInt) = maxAndMinOption(dataArr: dataA){
    
    print(maxInt,minInt)
}else{
    print("没有返回有效值")
}
函数的参数标签和参数名称

每个函数参数都有一个参数标签( argument label )以及一个参数名称( parameter name )。参数标签在调用函数的时候使用;调用的时候需要将函数的参数标签写在对应的参数前面。参数名称在函数的实现中使用。默认情况下,函数参数使用参数名称来作为它们的参数标签

/函数的参数标签和参数名称

//默认情况下,函数参数使用参数名称来作为它们的参数标签
func getString(inputStr:String) -> String  {
    
    return "hello" + inputStr
}

print(getString(inputStr: "Edison"))

//指定参数标签
func getName(youEnglishName name: String) -> String {
    
    return name + "hello"
}
print(getName(youEnglishName: "Edison"))


//忽略参数标签
func getAgeDes(_ age : Int) -> String {
    
    
    return "your age is" + String(age)
}

print(getAgeDes(14))

默认参数值

你可以在函数体中通过给参数赋值来为任意一个参数定义默认值(Deafult Value)。当默认值被定义后,调用这个函数时可以忽略这个参数

func someFunction(parameterWithoutDefault: Int, parameterWithDefault: Int = 12) {
    // 如果你在调用时候不传第二个参数,parameterWithDefault 会值为 12 传入到函数体中。
}
someFunction(parameterWithoutDefault: 3, parameterWithDefault: 6) // parameterWithDefault = 6
someFunction(parameterWithoutDefault: 4) // parameterWithDefault = 12

将不带有默认值的参数放在函数参数列表的最前。一般来说,没有默认值的参数更加的重要,将不带默认值的参数放在最前保证在函数调用时,非默认参数的顺序是一致的,同时也使得相同的函数在不同情况下调用时显得更为清晰

可变参数

一个可变参数(variadic parameter)可以接受零个或多个值。函数调用时,你可以用可变参数来指定函数参数可以被传入不确定数量的输入值。通过在变量类型名后面加入(...)的方式来定义可变参数。

可变参数的传入值在函数体中变为此类型的一个数组。例如,一个叫做numbersDouble... 型可变参数,在函数体内可以当做一个叫numbers[Double] 型的数组常量


func avg(dataAll: Double...) -> Double {
    
    var total : Double = 0
    for num in dataAll {
        total += num
    }
    return total/Double(dataAll.count)
}
print(avg(dataAll: 1,2,3,4,5,6,7,8,9))


输入输出参数

函数参数默认是常量。试图在函数体中更改参数值将会导致编译错误(compile-time error)。这意味着你不能错误地更改参数值。如果你想要一个函数可以修改参数的值,并且想要在这些修改在函数调用结束后仍然存在,那么就应该把这个参数定义为输入输出参数(In-Out Parameters)

定义一个输入输出参数时,在参数定义前加 inout 关键字。一个输入输出参数有传入函数的值,这个值被函数修改,然后被传出函数,替换原来的值。想获取更多的关于输入输出参数的细节和相关的编译器优化,请查看输入输出参数一节。

你只能传递变量给输入输出参数。你不能传入常量或者字面量,因为这些量是不能被修改的。当传入的参数作为输入输出参数时,需要在参数名前加 & 符,表示这个值可以被函数修改

//输入输出参数
func swapValue(valueA: inout Int,valueB : inout Int){
    
    let valueTemp = valueA
    valueA = valueB
    valueB = valueTemp
    
}

var value1 = 11
var value2 = 22
swapValue(valueA: &value1, valueB: &value2)
print("new 1:\(value1),new 2:\(value2)")


函数类型

每个函数都有种特定的函数类型,函数的类型由函数的参数类型和返回类型组成。

 func swapValue(valueA: inout Int,valueB : inout Int)
 的类型: (Int:Int)-> Int
 
 func swapValue2()
 的类型: () -> Void
使用函数类型

Swift中,使用函数类型就像使用其他类型一样。例如,你可以定义一个类型为函数的常量或变量,并将适当的函数赋值给它:

//使用函数类型

func addTwoInts(_ a: Int, _ b: Int) -> Int {
    return a + b
}

var addTest : (Int,Int)->Int = addTwoInts

print("\(addTest(2,3))")
嵌套函数

到目前为止,本章节我们所见到的函数都称之为全局函数(global functions),他们定义在全局域中,你可以把函数定义在别的函数体中,称之为嵌套函数(nested functions)
默认情况下,嵌套函数是对外界不可见的,但是可以被它们的外围函数(enclosing function)调用。一个外围函数也可以返回它的某一个嵌套函数,使得这个函数可以在其他域中被使用。

// 嵌套函数

func moreFun(x : Int , y : Int) ->  Int {
    
    func func1(p1 : Int) -> Int{
        
        return p1 + 10
    }
    
    func func2(p2 : Int) -> Int{
        
        return p2 + 20
    }
    
    return func1(p1: x) + func2(p2: y)
    
}


print("嵌套函数返回值:\(moreFun(x: 1, y: 2))")
//result:33

相关文章

  • Swift学习笔记(二)

    今天继续 Swift 的学习: 6、Swift 函数的表达方式

  • Swift函数_6

    函数是一段完成特定任务的独立代码片段。你可以通过给函数命名来标识某个函数的功能,这个名字可以被用来在需要的时候"调...

  • Swift函数(6)

    教程目录与OC一样的内容不重复介绍 函数 这个没什么说的,所有的内容都在代码里面标注了,详情看下面的代码. 202...

  • 6、Swift函数

    函数是一段完成特定任务的独立代码片段。你可以通过给函数命名来标识某个函数的功能,这个名字可以被用来在需要的时候“调...

  • 6、【Swift】函数

    函数是一段完成特定任务的独立代码片段 Swift 函数语法非常的灵活 没有参数名字的 C 风格函数,到复杂的带局部...

  • Swift学习笔记(二)

    Swift函数 Swift函数包含参数类型和返回值类型 函数定义 Swift使用关键字func定义函数。 函数定义...

  • Swift中的标准函数

    Swift中的标准函数 Swift中的标准函数

  • Swift の 函数式编程

    Swift の 函数式编程 Swift の 函数式编程

  • Swift---6.函数

    函数 函数的定义与调用定义:func xxx (xxx:type,xxx:type) -> type以func关键...

  • swift-函数6

    函数是一段完成特定任务的独立代码片段。你可以通过给函数命名来标识某个函数的功能,这个名字可以被用来在需要的时候"调...

网友评论

      本文标题:Swift函数_6

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