Swift具体解释之三----------函数(你想知道的都在这里)

函数(你想知道的都在这里)

注:本文为作者自己总结。过于基础的就不再赘述 ,都是亲自測试的结果。如有错误或者遗漏的地方。欢迎指正。一起学习。


1、 函数的简单定义和调用

简单的无參函数就不再赘述 , name为形參 。也是内部在数名 。

func sayHello(name:String) ->String
{
    return name+" say: hello"
}

调用的时候也非常easy sayHello("zhangsan")

是不是非常easy呀!

2、外部參数名

什么是外部參数名呢。事实上就是你给形參起得一个有意义的别名,让别人更理解这个參数的用途 。

func sayHello1(YourNmae name:String,name2:String) ->String
{
    return name+" say: hello "+name2
}

这里调用的时候要加上这个别名sayHello1(YourNmae: "zhangsan",name2:"lisi")

swift 默认从第二个參数開始自己主动加外部參数名。等于内部參数名 。

假设你不想输入外部參数名能够在前面加个下划线

//忽略外部參数名
func add(a:Int , _ b:Int) ->Int
{
    return a + b
}
add(1, 1) //2

3、參数默认值

函数传入參数的时候能够给一个默认值,传參数的时候这个有默认值的可传可不传

func plus(a:Int,another b:Int=0) -> Int
{
    return a+b;
}

这里给b的默认值是0,在调用的时候 print(plus(1)) 得到结果是1 。 plus(1,another:2) 得到结果是3

4、可变參数

可变參数(variadic parameter)能够接受一个或多个值。函数调用时。你能够用可变參数来传入不确定数量的输入參数。通过在变量类型名后面增加(…)的方式来定义可变參数。

传入可变參数的值在函数体内当做这个类型的一个数组

func arithmeticMean(numbers: Double...) -> Double {
    var total: Double = 0
    for number in numbers {
        total += number
    }
    return total / Double(numbers.count)
}

这里numbers被当成了一个数组 arithmeticMean(1,2,3,4,5.5) 得到结果 3.1

也能够传String 或者不论什么其它类型

func say(name:String, content:String ... )
{
    var str = name;
    for item in  content
    {
        str += item + " "
    }
    print(str)
}

调用say("lily ", content:"like" ,"eat" ,"apple") 结果:lily like eat apple

5、常量參数和变量參数

函数參数默认是常量。试图在函数体中更改參数值将会导致编译错误

我这里尝试去改动name的值,这里提示我不能改动let value

可是,有时候,假设函数中有传入參数的变量值副本将是非常实用的。你能够通过指定一个或多个參数为变量參数,从而避免自己在函数中定义新的变量。变量參数不是常量,你能够在函数中把它当做新的可改动副本来使用。

这时候我们须要。通过在參数名前加关键字 var 来定义变量參数:

func say1(var name:String)->String
{
    name += "2"
    return name;
}

调用函数say1("wangwu") 得到结果:wangwu2

6、函数类型(Function Types)

什么是函数类型呢? 事实上每一个函数都有种特定的函数类型。由函数的參数类型和返回类型组成。比方上面的say1的函数类型就是(String)->String ,无參数和返回值的 ()->() 返回Void类型的函数

看下swift中Void事实上是一个空得元组

以下看下怎么使用函数类型 。

  • 函数类型变量

    var mySay:(String)->String = say1

    跟定义普通的变量一样 ,把函数类型当普通类型使用就可以,这里say1 就是我们前面写的那个函数

    当然我们也能够利用swift的仅仅能判断,不指定类型var mySay = say1

    调用的时候跟调用普通函数一样mySay("hello") 结果:hello2

  • 函数类型作为參数类型
    func sayWord(mySay:(String)->String , name:String)->String
    {
    return mySay(name)
    }

    这里我们定义了一个函数,须要传入两个參数。第一个參数是一个函数类型的 (String)->String, 最后返回一个String .

    调用的时候我们能够在这里给它传一个定义好得函数 sayWord(say1,name: "my")。 结果:my2

    我们也能够使用闭包sayWord({ "\($0)2" },name: "my") 结果:my2

    在这里有些人可能还不太了解闭包,先不用管下一节会具体介绍 。

  • 函数类型作为返回类型

    有时候我们须要在不同的情况下使用不同的函数 ,比方我们须要传入一个数字。这个数字大于0使用Forward ,小于 0 使用 Backward , 当然这里仅仅是简单的逻辑,能够用if - else搞定 ,可是逻辑十分复杂的时候能够分两个函数来写

    来看下样例 :

    func stepForward(input: Int) -> Int {
    return input + 1
    }
    func stepBackward(input: Int) -> Int {
        return input - 1
    }
    func chooseFunc(distance:Int) -> (Int)->Int
    {
        return distance>10 ? stepBackward:stepForward
    }
    

    这里定义两个非常easy的函数 ,还是在定义了一个依据传入參数而选定函数的函数

    var input = 10;
    for i in 8...14
    {
        input = chooseFunc(i)(input)
        print(input)
    }
    

    我们在这里 分别给函数传入8 –14 ,得到的函数在传入10 。看下这个数字的改变 。结果是 :11 12 13 12 11 10 9 这个应该非常easy理解

7、返回元组

我们的函数也能够返回一个元组类型

func minMax( arr:Int ... )->(max:Int,min:Int)
{
    var max = 0
    var min = 0
    for item in  arr
    {
        if(item<max)
        {
            max = item
        }
        if(item>min)
        {
            min = item
        }
    }
    return (max,min)
}

这是一个非常easy的函数 ,传入一个可变參数 ,然后求出这写里面的最大和最小值 。

调用 :minMax(2,3,5,88,98,-3) 结果 :(.0 -3, .1 98)

可选元组 - 有时候我们函数里面返回的是一个nil 。所以这是我们就须要把我们的元组写成可选元组。

注意:(Int,Int)?

与 (Int?

,Int?) 不同, (Int,Int)? 表示整个元组是可选的 而不是每一个元素是可选的

func mm()->(max:Int,min:Int)?

{
    return nil
}
if let c = mm()
{
    print("aa")
}else
{
    print("bb")
}

这段代码最后输出的是 bb

8、输入输出參数 inout

将函数的參数声明成inout 这个值能够在函数中改动 , 然后被传出函数 替换原来的值 ,所以不能仅仅传入 字面量 要传入地址 加 &

var  myDate  =  9
func normalFunc(var data:Int)
{
    data = 100
}
normalFunc(myDate)
print(myDate)  //9

func inoutFunc(inout data:Int)
{
    data = 100
}
inoutFunc(&myDate)
print(myDate)  //100

能够看到,普通函数不会改变实參的值。而inout回改变 。传得时候一定要加上 & ,事实上不加也会爆错得。。

9、嵌套函数

你能够把函数定义在别的函数中 叫做嵌套函数 嵌套函数对外界是不可见的

还是我们刚才那几个函数 ,还能够这么玩。

func MychooseFunc(distance:Int) -> (Int)->Int
{
    func stepBackward(input: Int) -> Int {
    return input - 1
    }
    func stepForward(input: Int) -> Int {
        return input + 1
    }
    return distance>10 ? stepBackward:stepForward
}

临时先这么多吧, 以后想到什么再来补充 ,大家能够收藏了当字典,忘记了来查查使用方法。

学习iOS,有他就够了。小码哥视频。传智、黑马、各种swift书籍

时间: 2024-10-08 13:26:28

Swift具体解释之三----------函数(你想知道的都在这里)的相关文章

Swift详解之三----------函数(你想知道的都在这里)

函数(你想知道的都在这里) 注:本文为作者自己总结,过于基础的就不再赘述 ,都是亲自测试的结果.如有错误或者遗漏的地方,欢迎指正,一起学习. 1. 函数的简单定义和调用 简单的无参函数就不再赘述 , name为形参 ,也是内部在数名 . func sayHello(name:String) ->String { return name+" say: hello" } 调用的时候也很简单 sayHello("zhangsan") 是不是很简单呀! 2.外部参数名

《The Swift Programming Language 》——函数 使用方法详细讲解

函数是用来完成特定任务的独立的代码块.你给一个函数起一个合适的名字,用来标示函数做什么,并且当函数需要执行的时候,这个名字会被"调用". Swift 统一的函数语法足够灵活,可以用来表示任何函数,包括从最简单的没有参数名字的 C 风格函数,到复杂的带局部和外部参数名的 Objective-C 风格函数.参数可以提供默认值,以简化函数调用.参数也可以即当做传入参数,也当做传出参数,也就是说,一旦函数执行结束,传入的参数值可以被修改. 在 Swift 中,每个函数都有一种类型,包括函数的参

swift学习笔记2——函数、闭包

阅读目录 函数 闭包 之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询用.详细可以参考the-swift-programming-language-in-chinese,或者苹果官方英文版文档 当前版本是swift2.2 函数 func sayHello(personName: String, alreadyGreeted: Bool) -> S

Swift 1.1语言函数参数的特殊情况本地参数名外部参数名

Swift 1.1语言函数参数的特殊情况本地参数名外部参数名 7.4  函数参数的特殊情况 声明定义有参函数时,为函数的每一个参数都定义了参数名称.根据参数名定义的形式不同,函数参数包括本地参数和外部参数名两种本文选自swift入门很简单. 7.4.1  本地参数名 本地参数名就是定义函数名时,在参数列表中所写的参数名,它只可以在函数主体内使用.如以下的一个代码片段,它定义了一个函数名为fun的函数,在此函数的参数列表中定义的就是本地参数名文选自swift入门很简单. func fun(star

Swift中文教程(四)--函数与闭包

原文:Swift中文教程(四)--函数与闭包 Function 函数 Swift使用func关键字来声明变量,函数通过函数名加小括号内的参数列表来调用.使用->来区分参数名和返回值的类型: 1 func greet(name: String, day: String) -> String { 2 return "Hello \(name), today is \(day)." 3 } 4 greet("Bob", "Tuesday")

致首次创业者:如果做到了这三点,想不成功都难(转)

致首次创业者:如果做到了这三点,想不成功都难 2015-12-27 21:14 24人阅读 评论(0) 收藏 举报 分类: 互联网(2) 创业(4) 编者按:Rob Hayes 是 First Round 的合伙人,主要负责投资早期创业项目.经过十几年投资创业项目和自己创业的经历,他对创业有了深入的认识.他在这篇文章中给那些首次创业的创业者们分享了 有关创业的三点经验:全心投入招聘,积极融资.确保公司有足够多的现金流,确保公司有一个长远的目标. Aoron Patzer 曾经走到了事业的十字口路

瞬态抑制二极管详解,您想知道的都在这里

关于瞬态抑制二极管,您知道多少?在这个网络信息技术如此发达的时代里,只要有心,您想知道的都能了解到.瞬态抑制二极管,简称TVS二极管,是在稳压管工艺上发展起来的一种新型高效能的限压型保护器件.瞬态电压抑制二极管的核心单元是芯片,为半导体硅材料,芯片有单极性和双极性区分,单极性TVS管有一个PN结,双极性TVS管有2个PN结.单向TVS管只对一个方向的浪涌电压冲击起保护作用,双向TVS管相当于2个稳压管反向串联,对相反的极性浪涌电压都能起到保护作用. 瞬态抑制二极管特性详解,从0入门 要想全面了解

Swift泛型和泛型函数

泛型(generic)可以使我们在程序代码中定义一些可变的部分,在运行的时候指定.使用泛型可以最大限度地重用代码.保护类型的安全以及提高性能.在Swift集合类中,已经采用了泛型.一.一个问题的思考怎样定义一个函数来判断两个参数是否相等呢?如果参数是Int类型,则函数定义如下:func isEqualsInt(a:Int, b:Int) -> Bool {    return (a == b)}这个函数参数列表是两个Int类型,它只能比较两个Int类型参数是否相等.如果我们想比较两个Double

swift 2.0 语法 函数

//: Playground - noun: a place where people can play import UIKit /*: 函数 * 格式 func 函数名称(形参名称1: 形参类型, ...) -> 返回值类型 { // 逻辑代码 } * 没有参数没有返回值 * 没有参数有返回值 * 有参数没有返回值 * 有参数有返回值 */ // 没有参数没有返回值 // 如果函数的返回值是Void, 那么可以简写为() // 如果函数的返回值是(), 那么可以直接不写 func say()