博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Swift初识-3
阅读量:5042 次
发布时间:2019-06-12

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

七、函数
       1、定义格式:
func 函数名(形参列表)->(返回值类型){  }
形参列表格式:      形参名1:
形参类型1,形参名2:
形参类型2,. . .

    func math(num: Int, num1: Int, str: String) -> Int { return num + num1 }

 
       2、没有返回值、无参:
三种写法:1)func mathed1(age: Int, name: String) -> Void { }
                    2)func mathed2() -> () { }              //  无参形式
                    3)func mathed3(age: Int, name: String) { }
 
       3、返回元组:
一个函数可以返回元组数据

func find(id: Int) -> (name: String, age: Int) {

    if id > 0 {

        return ("jack", 12)

    } else {

        return ("None", 0)

    }

}

var person = find(12)

print("he is name \(person.name), age is \(person.age)")

 
       4、外部参数名:
一般情况,通过形式参数的名字,就能推断出参数的含义和作用

func addStudent(name: String, age: Int, id: Int) {  }         

     addStudent("jack", age: 12, id: 1024)

在函数内部一看参数名就知道参数作用,但是形式参数是用在函数内部的,当调用函数时就看不见形参的名字,有可能导致以后会不太明白每个参数的含义
        定义格式:
func 函数名(外部参数名  形式参数名:形参类型)->(返回值类型){  }

func addStudent(name: String, Stu_age age: Int, Stu_age id: Int) {}         

     addStudent("Jack", Stu_age: 12, Stu_age: 20)

⚠️一旦定义了外部参数名,在调用函数时就必须加上外部参数名

简写:使用#能简化外部参数名的定义 (新语法修改了,不再适用Swift 3)

 

       5、默认参数值:
可以在定义函数时,给形参指定一个默认值,调用函数时,就可以不用给这个形参传值 - func math(name: String, age: Int = 12) { }  math("jack”)  // age参数有个默认值12,调用函数时可以不传值给age参数
        带有默认参数值的形参,swift会自动给他生成一个跟形参名相同的外部参数名
若要传入age参数值时:math(“jack”, age: 21) 
在带有默认参数值的参数名前加下划线 _,调用函数时就不用写外部函数参数名

func math(name: String, _ age: Int = 12) { }   math("jack", 23)

 
       6、常量参数:
默认情况,函数参数都是常量参数,不能在函数内部修改

func math(let name: String)   // let 可省略

      7、变量参数:
可能需要在函数内部修改参数的值,这时需要定义变量参数
在参数名前加 var 即可:func math(
var num: Int) { num = 10 }

func append(var string: String, suffix: String, count: Int) -> String {

    for _ in 0..<count{

        string += suffix

    }

    return string

}

       8、输入、输出参数:
在C语言中,利用指针可以在函数内部修改外部变量的值。在swift中利用输入输出参数,也可以在函数内部修改外部变量的值。
            8.1、基本使用:
能输入一个值进来,也可以输出一个值到外部
定义:在参数名前面加个inout关键字即可   func math(inout num: Int)   math(&a)

func change(inout num1: Int, inout num2: Int) -> () {

    let temp = num1

    num1 = num2

    num2 = temp

}              // 交换外部变量的两个值

var a = 20; var b = 10

change(&a, num2: &b)   // 传入的参数前面必须加 &

 

            8.2、面试题:
如何在不利用第三方变量的前提下交换两个变量的值

    num1 = num1 + num2     &     num1 = num1^num2

    num2 = num1 - num2     &     num2 = num1^num2

    num1 = num1 - num2     &     num1 = num1^num2

 
            8.3、使用注意:
输入输出的参数使用注意
传递实参时,必须在实参前面加上& ;不能传入常量或者字面量(比如10)作为参数值(因为不可改)
输入输出参数不能有默认值;输入输出参数不能是可变参数
输入输出参数不能使用 
let、var 修饰(
inout
 和 
let 、var 不能共存)
            8.4、其他价值:
可以实现函数的多返回值(其实让函数返回元组类型,也能实现返回多个值)

func plusAndMinus(num1: Int, num2: Int) -> (sum: Int, min: Int) {

    return (num1 + num2, num1 - num2)

}

var  result = plusAndMinus(22, num2: 14)

result.sum   //  36

 

result.min   //  8

 

func plusAndMinus(num1: Int, num2: Int,inout sum: Int, inout min: Int) -> () {

    sum = num1 + num2

    min = num1 - num2

}

var sums = 0; var mins = 0

plusAndMinus(12, num2: 6, sum: &sums, min: &mins )

sums   // 18

mins   // 6

 

转载于:https://www.cnblogs.com/Miracle-Huang/p/5804712.html

你可能感兴趣的文章
Unity 游戏框架搭建 (十三) 无需继承的单例的模板
查看>>
模块与包
查看>>
mysql忘记root密码
查看>>
apache服务器中设置目录不可访问
查看>>
嵌入式Linux驱动学习之路(十)字符设备驱动-my_led
查看>>
【NOIP模拟】密码
查看>>
java容器---------手工实现Linkedlist 链表
查看>>
three.js 性能优化的几种方法
查看>>
《梦断代码》读书笔记(三)
查看>>
FreeMarker解析json数据
查看>>
Java8 Lambda表达应用 -- 单线程游戏server+异步数据库操作
查看>>
次序+“选择不重复的记录”(3)——最大记录
查看>>
Codeforces 450 C. Jzzhu and Chocolate
查看>>
[Unity3D]Unity3D游戏开发MatchTarget的作用攀登效果实现
查看>>
ACdream 1115 Salmon And Cat (找规律&amp;&amp;打表)
查看>>
JSON、JSONP、Ajax的区别
查看>>
AngularJS学习篇(一)
查看>>
【转载】 IP实时传输协议RTP/RTCP详解
查看>>
关于Xshell无法连接centos6.4的问题
查看>>
Linux系统的数据写入机制--延迟写入
查看>>