学习来自《极客学院:Swift中的函数》

工具:Xcode6.4

直接上基础的示例代码,多敲多体会就会有收获:百看不如一敲,一敲就会

练习一:

 import Foundation

 //函数
/*1.定义函数的语法格式
func 函数名(形参列表) -> 返回值类型 {
//可执行语句组成的函数
}
*/
//定义和调用函数
func sayHello(personName: String) -> String{
return "Hello "+personName
}
println(sayHello("HeYang")) //2.外部参数名 局部参数名:形参类型
func area(宽 width: Double,高 height: Double) -> Double
{
return width * height
}
print("面积是:")
println(area(宽: 3.4, 高: 4.3))
//但是这样比较麻烦,所以需要用#号
func area_1(#width: Double,#height: Double) -> Double
{
return width * height
}
print("改了之后:")
println(area_1(width: 34.1, height: 9.2)) //3可变参数:在参数类型后面添加 ... 表示该参数
func sum(numbers: Int...) -> Int{
var total : Int =
for num in numbers{
total += num
}
return total
}
println("求和是:\(sum(1,2,3,4))")
//要注意的地方:一个函数只能有一个可变参数,而且可变参数只能位于最后 //4.默认参数
func sayHi(msg: String,name: String = "HeYang"){
println("\(name),\(msg)")
}
sayHi("你好~")
sayHi("你好~", name: "world")
//不能去掉里面的 name: 也就是带有默认参数的是有外部参数名的,也就是说,默认参数相当于是在外部声明定义的。如果要忽略的话,就在默认参数前面添加下划线:unc sayHi(msg: String,_ name: String = "HeYang")不是_name而是_ name //如果有可变参数,也有默认参数,那么可变参数放在最后面,默认参数只能出现在次后面 //5.常量形参 和 变量形参
func factorial(var number:Int) -> Int{
var result: Int =
while number > {
result = result*number
number--
}
return result
//变量的形参作用域在函数内部,所以形参怎么变化都是不会影响到外面的变量
}
print("形参")
println(factorial()) //6.In-Out形参
func swap(inout a:Int,inout b:Int){
var temp = a
a = b
b = temp
}
var a =
var b =
swap(&a, &b)
println("交换之后,a:\(a) b:\(b)")
/*注意
1.只能传入变量作为实参
2.输入输出参数不能带有默认值
3.如果你用关键字,inout标记了一个参数,这个参数不能用var或者let去标记
*/

运行输出结果是:

练习二:

 1 import Foundation
2
3 //函数
4
5 //1.多个返回值
6 func area(width: Double,height: Double) -> (Double,Double)
7 {
8 var b = width
9 var a = width * height
10 return (a,b)
11 }
12 println(area(2,3))
13 //2、函数类型
14 func addTwoInts(a: Int, b: Int) -> Int{
15 return a + b
16 }
17 var function: (Int,Int) ->Int = addTwoInts
18 println(function(3,4))
19 //3.函数类型作为参数类型
20 func outfunc(function_1: (Int,Int) ->Int,m:Int,n:Int){
21 println("result:\(function_1(m, n))")
22 }
23 outfunc(addTwoInts ,12,12)
24 //4函数类型作为返回值类型
25 func square(a :Int)->Int{
26 return a*a
27 }
28 func cube(a:Int)->Int{
29 return a*a*a
30 }
31 func getMatchFunction(str:String)->(Int)->Int{
32 switch(str){
33 case "square":
34 return square
35 default:
36 return cube
37 }
38 }
39 var mathFunc = getMatchFunction("cube")
40 println(mathFunc(5))
41 //函数重载
42 func test(){
43 println("无参数的test函数")
44 }
45 func test(msg:String){
46 println("重载的test()函数\(msg)")
47 }
48 func test(msg:String) -> String{
49 println("重载的test()函数,外部参数为\(msg)")
50 return "test"
51 }
52 func test(#msg:String) {
53 println("重载的test()函数,外部参数为\(msg)")
54 }
55 test()
56 var result: Void = test(msg: "何杨")
57 var result2: String = test("哇哦")
58 /*局部参数名不能作为区分重载 运行会报错
59 func test(message:String){
60 println("")
61 }
62 */

运行的结果:

Swift 中的函数的更多相关文章

  1. Swift 中的函数(下)

    学习来自<极客学院:Swift中的函数> 工具:Xcode6.4 直接上基础的示例代码,多敲多体会就会有收获:百看不如一敲,一敲就会 import Foundation /******** ...

  2. Swift 中的利刃,函数和闭包

    input[type="date"].form-control,.input-group-sm>input[type="date"].input-grou ...

  3. Swift 中的高阶函数和函数嵌套

    高阶函数 在Swift中,函数可做为“一等公民”的存在,也就意味着,我们可以和使用 int 以及 String 一样,将函数当做 参数.值.类型来使用. 其中,将函数当作一个参数和值来使用可见下: t ...

  4. 使用swift 中的注意,不断完善中

    1. 应该充分利用swfit的新特性 比如如果按照oc里的习惯,调用一个delegate中都optional函数应该这样写 if delegate != nil && delegate ...

  5. Swift学习之函数和简单地控件的创建

     今天还是重复昨天做的事情--敲代码,但唯一的不同就是所学的知识不同了,我们又进一步往深得层次学习了,感觉越来越有意思了,虽然临近结束了看着大家积极性越来越低了,但是我知道我不能这样,我要比别人付出的 ...

  6. Swift中的闭包(Closure) 浅析

    转载自:http://www.devtalking.com/articles/closure-expressions-in-swift/ 闭包在Swift中非常有用.通俗的解释就是一个Int类型里存储 ...

  7. Swift 学习- 07 -- 函数

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

  8. Swift中的闭包(Closure)[转]

    闭包在Swift中非常有用.通俗的解释就是一个Int类型里存储着一个整数,一个String类型包含着一串字符,同样,闭包是一个包含着函数的类型.有了闭包,你就可以处理很多在一些古老的语言中不能处理的事 ...

  9. Swift中的指针类型

    Swift编程语言为了能与Objective-C与C语言兼容,而引入了指针类型.尽管官方不建议频繁使用指针类型,但很多时候,使用指针能完成更多.更灵活的任务.比如,我们要实现一个交换两个整数值的函数的 ...

随机推荐

  1. Membership三步曲

    http://www.cnblogs.com/jesse2013/p/membership-part1.html http://www.cnblogs.com/jesse2013/p/membersh ...

  2. Nodejs建站笔记-注册登录流程的简单实现

    1. 使用Backbone实现前端hash路由 登录注册页面如下: 初步设想将注册和登录作为两个不同的url实现,但登录和注册功能的差距只有form表单部分,用两个url实现显然开销过大,所以最终方案 ...

  3. lettuce webdriver 自动化测试---玩转BDD

    行为驱动开发(BDD),依然高大上的矗立在远方,很少被人问津,一方面是BDD的思想不太容易理解,别一方面BDD的资料并不多.中文的资料就更少了. 之前增写过一篇<python BDD 框架之le ...

  4. iOS-UISegmentedControl-隐藏边框

    原理: 1. 用tintColor属性,把整个UISEgmentControl 设置成为透明色. 2. 设置正常状态下的titleTextAttributes.和选中状态下的titleTextAttr ...

  5. MySQL中的账号与权限管理

    MySQL权限管理 权限系统的工作原理     MySQL权限系统通过下面两个阶段进行认证:     (1)对连接的用户进行身份认证,合法的用户通过认证.不合法的用户拒绝连接.     (2)对通过认 ...

  6. 基于HTML5技术的电力3D监控应用(四)

    回答了知乎问题较长,一些使用WebGL的经验,作为新的一篇: 正好逛到这个问题,正好是2013年底,正好最近基于的HT for Web 3D做的电力项目收尾,正好用到的就是WebGL技术,因此说说自己 ...

  7. Spring基础——小的知识点

    一.整合多个配置文件 在 Spring Config 文件中,可以使用 <import> 标签将别的配置文件引入到一个文件中,进行配置文件的集成.该标签和 <bean> 标签同 ...

  8. 重构第21天 合并继承 (Collapse Hierarchy)

    理解:本文中的”合并继承”是指如果子类的属性和方法也适合于基类,那么就可以移除子类,从而减少依赖关系. 详解:上一篇我们讲到“提取子类”重构是指当基类中的一个责任不被所有的子类所需要时,将这些责任提取 ...

  9. SQLServer根据不同前缀生成多套流水号

    --种子表 --@prefix 前缀 --@seed 种子值 create table RefNoSeed( prefix ) unique, seed int ) go --测试表 --@inser ...

  10. 【JavaScript回顾】继承

    组合继承 组合继承(combination inheritance),有时候也叫做伪经典继承,指的是将原型链和借用构造函数的 技术组合到一块,从而发挥二者之长的一种继承模式.其背后的思路是使用原型链实 ...