1: 函数形式:

Swift函数以关键字func 标示。返回类型->后写明。如果没有返回类型可以省去。多个参数用,分割。其中参数名字在前:类型描述

func GetName(strName:String)-> String
{
return "for " + strName
}
let name = GetName("xx")
println("\(name)")

2:函数返回值:函数返回值用->后跟类型说明符号。函数的多返回值。可以用元组返回复合多值。当然也可以没有返回值。

func TestNoneReturn(strName:String)
{
println("\(strName)")
} TestNoneReturn("xx ")
func TestReturn(strName:String)->String
{
return strName + "hello"
} let showName = TestReturn("xx ")
println("\(showName)")
func TestTupleReturn(iAge:Int, strName:String)->(iAgeAdd:Int, strNameFormat:String)
{
let iAgeReturn :Int = iAge +
let strNameReturn :String = " xx oo " + strName; return (iAgeReturn, strNameReturn)
} let tupleReturn = TestTupleReturn(, "yang ")
println("\(tupleReturn.iAgeAdd) \(tupleReturn.strNameFormat)")

3:函数参数

3.1函数参数默认为let类型的。如果你想更改参数副本,那么你要显示使用var修饰。当然也可以不需要参数的函数。如果你像更改参数作为输入输出用inout,调用时候要用取地址符号&

func GetName(var strName:String)-> String
{
strName += " hello"
return "for " + strName
}
let name = GetName("xx")
println("\(name)")
func GetName(inout strName:String)
{
strName += " hello" }
var strTest = "oo"
GetName(&strTest)
println("\(strTest)")

3.2函数参数名字。函数形参名字有本地形参和外部形参之分。

func someFunction(externalParameterName localParameterName: Int){
func TestName(strHead:String, strTail:String, strInsert:String)->String{
return strHead + strInsert + strTail
} let strRes:String = TestName("head ", "tail ", "insert ")
println("\(strRes)")
func TestName(head strHead:String, tail strTail:String,insert strInsert:String)->String{
return strHead + strInsert + strTail
} let strRes:String = TestName(head:"head ", tail:"tail ", insert:"insert ")
println("\(strRes)")

如果你外部和本地形参名字一样,那么你可以用#简写。

func TestSameName(#name:String, #age:String)->String{
return "name: " + name + "\nage: " + age
} let strRes = TestSameName(name:"xx", age:"")
println("\(strRes)")
 

3.3函数参数默认值:如果设置了函数默认值,那么在调用的时候可以省去默认值的调用。

func TestDefaultParam(name:String, defaultName:String = " defaultNM"){
let nameRes = “\n” + name + defaultName;
println(nameRes)
}
TestDefaultParam("mm")
TestDefaultParam("xx", defaultName:" oo")

3.4 可变形参:用"..."代表可变形参。类型一样

func TestMore(numbers:Int...){
var iRes:Int =
for item in numbers {
iRes += item
}
println("\(iRes)")
}
TestMore(,,)
TestMore(,,,,)

4:函数类型:由函数参数类型与顺序以及函数返回值类型

func(iAge:Int, strName:String)->String
{
return "KO"
}
//该函数类型可以记为:(Int, String)->String

在 swift 中您可以像任何其他类型一样的使用函数类型。例如,你可以定义一个常量或变量 为一个函数类型,并为变量指定一个对应函数

func AddTwoInts(a: Int, b: Int) -> Int {
return a + b
} var AddFunction:(Int, Int)->Int = AddTwoInts
这样你可以用AddFuncton调用方法,其实有点类似与AddFunction是函数AddTwoInts的名字变量
var iRes = AddFunction(1, 4)
同其他变量一样,它还支持类型推断

let AnotherMathFunction = AddTwoInts

var iOther = AnotherMathFunction(5, 6)

函数类型可以作为函数参数使用

func PrintMathResult(MathFunction: (Int, Int) -> Int, a: Int, b: Int)
{
. println("Result: \(MathFunction(a, b))") . }
. PrintMathResult(AddTwoInts, , )

函数类型也可以作为返回类型

func FunctionTest(a:Int, b:Int)->(Int, Int) -> Int{
}

Swift 函数的更多相关文章

  1. Swift函数编程之Map、Filter、Reduce

    在Swift语言中使用Map.Filter.Reduce对Array.Dictionary等集合类型(collection type)进行操作可能对一部分人来说还不是那么的习惯.对于没有接触过函数式编 ...

  2. 如何在C语言中调用Swift函数

    在Apple官方的<Using Swift with Cocoa and Objectgive-C>一书中详细地介绍了如何在Objective-C中使用Swift的类以及如何在Swift中 ...

  3. swift函数的用法,及其嵌套实例

    import Foundation //swift函数的使用 func sayHello(name userName:String ,age:Int)->String{ return " ...

  4. Swift函数

    函数 函数 介绍 // func // 在Swift中,一个个的方法就是函数 // 1.定义函数的关键字是func // 在定义函数的时候,不管有没有参数都加括号,参数写在括号中 // 在定义函数时, ...

  5. 4 .Swift函数|闭包

    在编程中,我们常把能完成某一特定功能的一组代码,并且带有名字标记类型叫做函数,在C语言中,我们知道函数名就是一个指针,它指向了函数体内代码区的第一行代码的地址,在swift中也具有同样的功效. 在Sw ...

  6. Swift函数|闭包

    在编程中,我们常把能完成某一特定功能的一组代码,并且带有名字标记类型叫做函数,在C语言中,我们知道函数名就是一个指针,它指向了函数体内代码区的第一行代码的地址,在swift中也具有同样的功效. 在Sw ...

  7. Swift函数的定义建议

    /* Swift中函数命名的智慧 */ // 1.一般情况下, 我们写一个函数是这么写的 func sayHello(name: String , greeting: String) { print( ...

  8. Swift 函数和类

    函数: func sayHello(personName:String,z:Int)->{ return "hello"+personName+z } print(sayHe ...

  9. Swift函数柯里化(Currying)简谈

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 下面简单说说Swift语言中的函数柯里化.简单的说就是把接收多 ...

随机推荐

  1. Unity3D DF根据名称获取多个子控件代码

    dfPanel control = gameObject.GetComponent<dfPanel>(); dfLabel avatarName = control.Find<dfL ...

  2. [安卓] 9、线程、VIEW、消息实现从TCP服务器获取数据动态加载显示

    一.前言: 一般情况下从TCP服务器读取数据是放在一个线程里读的,但是刷新界面又不得不放在线程外面,所以需要用消息传递把线程里从TCP里获得的数据传送出来,然后根据数据对页面进行相应的刷新. 二.业务 ...

  3. 关于拦截器实现日志存储到db的代码调试

    问题是,原来系统有日志操作的代码,但日志最终没有存到数据库. xml中拦截器配置: <mvc:interceptor> <mvc:mapping path="/admin/ ...

  4. atitit. hb 原生sql跨数据库解决原理 获得hb 数据库类型运行期获得Dialect

    atitit. hb 原生sql跨数据库解决原理 获得hb 数据库类型运行期获得Dialect   #-----原理 Hibernate 运行期获得Dialect   2010-07-28 12:59 ...

  5. Leetcode 198 House Robber 动态规划

    题意是强盗能隔个马抢马,看如何获得的价值最高 动态规划题需要考虑状态,阶段,还有状态转移,这个可以参考<动态规划经典教程>,网上有的下的,里面有大量的经典题目讲解 dp[i]表示到第i匹马 ...

  6. Leetcode 232 Implement Queue using Stacks STL

    本题用两个栈实现队列,用栈的基本操作去实现队列的所有基本操作push(),pop(),peek()以及empty() sa作为输入栈,sb作为输出栈,将sa输入元素的反转过来放到sb中 push与sa ...

  7. 上海SAP代理商 电子行业ERP系统 SAP金牌代理商达策

    上海SAP代理商 电子行业ERP系统 SAP金牌代理商达策上海达策为电子行业企业提供了多样的ERP信息化管理系统.基于多营运中心的管理架构体系,构造了以供应链.生产管理.财务一体化为核心,协同HR.B ...

  8. IntelliJ IDEA 2016.2.4 最新版激活方法

    新版激活方法: 1.在线激活 2016年7月14日 更新: 该域名已无法激活,参见2016.2 的搭建授权服务器激活, 菜单help >>>> Register 选择Licen ...

  9. LeetCode:Roman to Integer,Integer to Roman

    首先简单介绍一下罗马数字,一下摘自维基百科 罗马数字共有7个,即I(1).V(5).X(10).L(50).C(100).D(500)和M(1000).按照下述的规则可以表示任意正整数.需要注意的是罗 ...

  10. [Aaronyang]谈谈2015年AY对WPF全面技术总结40多篇WPF,炫到没朋友的AYUI来了

             原著:AY WPF博客- 把wpf推广出去,让那些鄙视的人说不 大家好! 我是AY,首先声明,我在做一件很枯燥的事情,我是个91后程序员,每天熬夜完成计划的过着下班后的生活. 那天有 ...