文档章节

Swift学习—函数

TomatosX
 TomatosX
发布于 2015/05/20 12:03
字数 918
阅读 52
收藏 0
知识点:

  1. swift函数的不同点
  2. 无返回值的函数的三种写法
  3. 返回元组数据
  4. 外部参数名
  5. 外部参数名的简写
  6. 默认参数值,有默认参数值的时候,系统会自动的将参数名当成外部参数名。
  7. 在有默认的参数值的情况下,增加一个下划线_,系统会忽略掉外部参数名
  8. 函数的形参默认是常量,想要在函数体的内部改变形参的值,将其设置成var即可
  9. 输入输出参数及其注意点
示例代码:

//: Playground - noun: a place where people can play

import UIKit

// sum函数名,num1和num2参数名,箭头后面的Int是返回类型
func sum(num1: Int, num2: Int) -> Int {
    return num1 + num2
}

sum(1, 2)

// 无返回值的函数的三种写法
func noRe1() -> Void {}
func noRe2() -> () {}
func noRe3(){}

// 返回元组数据
func getPoint() -> (Int, Int) {
    return (10, 10)
}
func getPerson(id: Int) -> (name: String, age: Int){
    if id > 0 {
        return ("jack", 20)
    } else {
        return ("nobody", 10)
    }
}

var person = getPerson(10)
println("name: \(person.name), age: \(person.age)")

// 外部参数名,这里分别为name,age,no设置了外部参数名,stu_name,stu_age,stu_no
// 作用,方便阅读
func addStudent(stu_name name:String, stu_age age:Int, stu_no no:Int) {
    println("name: \(name), age: \(age), no:\(no)")
}

addStudent(stu_name: "jack", stu_age: 10, stu_no: 20)

// 外部参数名的简写,在内部形参名的前面加上#号,这样内部形参名就也可以充当外部参数名
func addStudent2(#name: String, #age: Int, #no: Int) {
    println("name: \(name), age: \(age), no:\(no)")
}

addStudent2(name: "Tom", age: 20, no: 222)

// 默认参数值
// 这里给age了一个默认值,所以调用的时候,不写也行
// 有默认参数的形参,系统会给其提供一个外部参数名,和内部形参参数名相同
func addStudent3(#name: String, age: Int = 20) {
    println("name: \(name), age: \(age)")
}
addStudent3(name: "Smith")
addStudent3(name: "Hello", age: 10)

// 在有默认参数名前增加一个下划线_,系统会忽略掉外部参数名
func addStudent4(name: String, _ age: Int = 20) {
    println("name: \(name), age: \(age)")
}
addStudent4("A", 2)

// 函数的形参默认是常量,如果想在函数的内部修改形参的值,将形参设置成var即可
func addStr(var initStr: String, suffix: String, num: Int) -> String {
    for _ in 0..<num {
        initStr += suffix
    }
    return initStr
}
addStr("A", "B", 10)

// 输入输出参数,类似于C中的根据地址改变函数中变量的值
/*
注意:
1、不能传入常量和字面量(比如10)数,因为他们都是不可更改的
2、传递参数时候,必须在实参的前面加上&
3、输入输出参数不能有默认值
4、输入输出参数不能使可变参数
5、输入输出参数不能再使用let、var修饰(inout和let、var不能共存)
*/
func change(inout num: Int) {
    num = 10
}
var a = 20
// 凡是输入输出参数,调用的时候前面都要增加&符号
change(&a)
println(a)

// 如何在不使用第三个参数的情况下,交换两个数
func swap(inout a:Int, inout b:Int) {
    a = a + b
    b = a - b
    a = a - b
}
// 算法2
func swap1(inout a:Int, inout b:Int) {
//    异或运算的特点,相同的会抵消
    a = a ^ b
    b = a ^ b
    a = a ^ b
}

var temp1 = 10
var temp2 = 20
swap(&temp1, &temp2)
println("temp1 = \(temp1), temp2 = \(temp2)")


var temp3 = 30
var temp4 = 40
swap1(&temp3, &temp4)
println("temp1 = \(temp3), temp2 = \(temp4)")

// 输入输出函数的使用价值
// 举例:不用返回值也可以计算出和与差
// 有返回值写法
func sumAndMinus(num1: Int, num2: Int) -> (sum: Int, minus: Int) {
    return (num1 + num2, num1 - num2)
}
var result = sumAndMinus(10, 20)
result.sum
result.minus

// 输入输出函数写法
func sumAndMinus2(num1: Int, num2: Int, inout sum:Int, inout minus:Int) {
    sum = num1 + num2
    minus = num1 - num2
}
var sum1 = 0
var minus1 = 0
sumAndMinus2(20, 10, &sum1, &minus1)
sum1
minus1




© 著作权归作者所有

TomatosX
粉丝 23
博文 207
码字总数 119547
作品 0
成都
iOS工程师
私信 提问
37.Swift学习之高阶函数

闭包是 Swift 中一个重要的知识点,不仅在开发中能够帮助解决很多问题(如逆向传值),而且在许多官方系统库方法中都能看到它的身影,尤其是在集合中提供了很多高阶函数来对元素进行访问及操...

YungFan
11/08
0
0
swift4.1 系统学习二十六 特性、编译标志与检查API的可用性

/* 特性、编译标志与检查API的可用性 本节的内容都属于编译时行为。swift与C、C++、OC不同,它没有预处理器这个概念,所以不存在任何预处理时的概念。 我们可以认为swift源码的解析和处理都包...

小曼Study
2018/11/07
0
0
Go语言基础学习:变量

Go语言基础学习(一)变量 猜你喜欢 Ceylon语言学习笔记(1) 《从零开始学Swift》学习笔记(Day 69)——Swift与Objective-C混合编程之语言 go语言学习-常量 GO语言学习-复杂类型(2) Go语言学习...

d_watson
2016/04/15
13
0
你没看错:Swift可以直接调用Python函数库

上周Perfect又推出了新一轮服务器端Swift增强函数库:Perfect-Python。对,你没看错,在服务器端Swift 其实可以轻松从其他语种的函数库中直接拿来调用,不需要修改任何内容。如果没有类似经验...

rockford
2017/08/30
0
0
Swift 个人学习笔记 - 06: 闭包(Clousures)

本文章纯粹是中文版《The Swift Programming Language》的学习笔记,所以绝大部分的内容都是文中有的。本文是本人的学习笔记,不是正式系统的记录。仅供参考 以下还是有很多没看懂、不确定的...

amc
2017/03/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

JavaScript权威指南笔记14

第14章、window对象 1、计时器 I-1 setTimeout()和setInterval()可在指定时间后调用 setTimeout()返回值可传递给clearTimeout()用于取消该函数的执行。 多久后执行。 setInterval()指定时间间...

_Somuns
2分钟前
0
0
python3.7安装教程

原创 python3.7安装教程 2018-09-18 21:10:56 PtaQ 阅读数 20628更多 分类专栏: python 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文...

_纵横捭阖_
15分钟前
1
0
windows使用docker运行mysql等工具(二)安装运行mysql

今天接着上一篇的内容继续来学习安装运行mysql。建议先阅读第一篇:windows安装docker 一 查看mysql版本 如果想知道mysql镜像具体有哪几个版本,需要去docker hub查看。 地址如下: https://...

执偕
25分钟前
0
0
IT兄弟连 HTML5教程 CSS3属性特效 文字排版

direction定义文字排列方式,所有浏览器都兼容这个属性,有两个可选值rtl和ltr。文字排版的参数说明如表1所示。 表1 CSS3文字排版参数说明 上表所示,ltr是初始值,表示left-to-right,就是从...

老码农的一亩三分地
25分钟前
1
0
做好一名linux运维工程师

如何做好一个合格的运工程师,运维工程师前景怎么样呢?就这些问题,与大家交流一下。首先对于运维工程师的要求是十分严苛的了,运维工程师不但要针对不同的问题做出响应,而且需要不断的补充...

问题终结者
26分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部