SWIFT Function
Swift中的函数跟JAVA语言的函数差不多,但也有差别,SWIFT中定义函数可以指定参数的名称这也是别的语言没有的,好处就是增加了可读性。其返回值是放在未尾的,如以下定义一个加法器:
func add(number1 num1:Int,number2 num2:Int) -> Int{
return num1 + num2
}
调用时需写上参数名称,也就是参数中的第一个名称
add(number1:1,number2:2)
当然定义函数时number1和number2写不写都可以,为了增加程序的可读性建议还是写上,当然也可以将number1跟num1设为一样的,在参数前面加入#号即可:
func add(#number1:Int,#number2:Int) -> Int{
return number1 + number2
}
add(number1: 1, number2: 2)
函数参数也可以有默认值:
//Has default value function
func sayHello(userName nickName:String,greeting:String = "Hello"){
println("\(greeting),\(nickName)")
}
sayHello(userName: "Ken") //此时打印:Hello Ken
可变参数的函数定义,可变参数要放在参数列表的最后一位:
//changable length parameters
//changeable paramter put at the last position ...
func whoJoin(user1:String,user2:String,others:String ... ){
var users = "\(user1),\(user2)"
if !others.isEmpty{
for user in others{
users += ",\(user)"
}
}
println(users)
}
默认情况下在函数的参数是常量,也就是说在函数体内不可以修改参数的值,如果要修改....自代码:
//the paramters can be changed,as default situation the parameters is const
func toBianry(var num:Int) -> String{ //将参数用var关键字修饰
println(num)
var result = ""
while num > 0 {
result = String(num % 2) + result
num = num / 2 //这样就不会报错了
}
return result
}
参数的值传递在参数前加入关键字inout:
func calculateResult(inout #battery:Int){
switch battery{
case 0..<3:
battery = 1
case 3..<6:
battery = 2
case 6..<10:
battery = 3
default:
battery = 4
}
}
var battery = 9
calculateResult(battery: &battery) //调有时系统也会提示加入&附号
println(battery) //3
无返回值的函数可以有以下三种定义:
第一种是返回一个关键字Void:
func sayHello(username:String) -> Void {
println("Hello \(username)")
}
因为没有返回值,可以直接返回一对括号,这就是第二种:
func sayHello(username:String) -> () {
println("Hello \(username)")
}
第三种就什么也不写,这种还是比较方便的
func sayHello(username:String){
println("Hello \(username)")
}
类似于JAVASCRIPT中的函数变量,SWIFT中也有类似的功能,拿上文中的add做演示,此时变量的参数类型定义为函数的参数列表类型返回值类型也是原函数的返回值类型,此时就可以调用新的方法了。
var addMethod:(Int,Int) -> Int = add
addMethod(10,36)
在JAVASCRIPT中函数可以做为参数传给一个函数,SWIFT中也可以这样实现,开放一个函数接口供开发者传入自定义方法。灰常强大的功能
如下定义两个方法,具体的实现很简单。
func addOnePoint(#num:Int) -> Int{
return num + 1
}
func minusOnePoint(#num:Int) ->Int{
return num - 1
}
//此方法的第一个参数为函数类型,调用时传一个与之参数列表相同返回值类型相同的函数名称即可。
func operationNum( op:(Int) -> Int,num:Int) -> Int{
return op(num)
}
operationNum(addOnePoint, 10) //11
operationNum(minusOnePoint, 10) //9
以下为自定义一个方法然后调用系统的排序方法将数组从位数从小到大字符从大到小排序
var nickNames = ["a","b","c","ab","ad","ac","abcd","dbca","cba","abc","cab"]
sorted(nickNames) func mySortFunction(a:String,b:String) -> Bool{
return countElements(a) == countElements(b) ? a > b : countElements(a) < countElements(b)
} sorted(nickNames, mySortFunction)//"c", "b", "a", "ad", "ac", "ab", "cba", "cab", "abc", "dbca", "abcd"]
函数也可以做为返回值,如下代码
func tier1MailFee( weight:Int) -> Int{
return * weight
}
func tier2MailFee(weight:Int) -> Int{
return * weight
}
func chooseMailFeeCalcMethod(weight:Int) -> (Int) -> Int{ //定义一个返回值为函数的函数,非常酷吧,这样就把具体的业务逻辑抽象出来,易于代码的维护
return weight <= ? tier1MailFee : tier2MailFee
}
func totalPrice(weight:Int) -> Int{
let mailFeeCalc:(Int) -> Int = chooseMailFeeCalcMethod(weight) //返回一个具体的函数
return mailFeeCalc(weight)
}
totalPrice() //return 38
//SWIFT中函数体内也可以嵌套函数,列如某个函数不想暴露出来时,修改一下上面的代码。
func totalPrice(weight:Int) -> Int{
func chooseMailFeeCalcMethod(weight:Int) -> (Int) -> Int{ //定义一个返回值为函数的函数,非常酷吧,这样就把具体的业务逻辑抽象出来,易于代码的维护 return weight <= 10 ? tier1MailFee : tier2MailFee
}
let mailFeeCalc:(Int) -> Int = chooseMailFeeCalcMethod(weight) //返回一个具体的函数
return mailFeeCalc(weight)
}
SWIFT Function的更多相关文章
- Swift #function 和 _cmd (Objective-C)
NSStringFromSelector(_cmd); // Objective-C print(__FUNCTION__) // Swift 2 print(#function) // Swift ...
- Swift function how to return nil
这两天在学习Stanford出品的iOS7的课程,这个课程去年也看过,但是看到第3课就不行了,满篇的OC,把人都搞晕了.这段时间因为要写个iOS的App,正好赶上了Swift问世,所以趁着这股劲继续学 ...
- 如何在C语言中调用Swift函数
在Apple官方的<Using Swift with Cocoa and Objectgive-C>一书中详细地介绍了如何在Objective-C中使用Swift的类以及如何在Swift中 ...
- Swift与Objective-C交互
在同一个工程中是可以同时使用Swift和OC的,但不可以同时出现在同一个文件中. OC调用Swift相关信息的方法 在***.m文件中导入工程名-Swift.h即可. 如工程名为ABC,则在需要使用S ...
- Swift基础学习笔记
1.在学基本语法之前,简单看一下与OC的不同 注释:OC #pragma marks 视图加载完成 Swift //MARK: 视图加载完成 //TOOO:设置背景颜色(Xco ...
- iOS中UIWebView与其中网页的javascript的交互
首发:个人博客,更新&纠错&回复 1.本地语言调js的方式与android中的方式类似,也是向WebView控件发送要调用的js语句 2. 但js调本地语言,则不是像android那样 ...
- macOS webview编程
好像是macOS10.10之后,以及iOS8之后,新出现的WKWebview组件就迅速的替代了Webview及UIWebView.后者的确存在一些无法解决的bug,诸如架构导致的速度缓慢和内存泄漏. ...
- Calling Functions With Pointer Parameters
 参数类型是Constant Pointer 也就是 UnsafePointer<Type> 可以传入的类型: UnsafePointer<Type>/UnsafeMutab ...
- 通过百度echarts实现数据图表展示功能
现在我们在工作中,在开发中都会或多或少的用到图表统计数据显示给用户.通过图表可以很直观的,直接的将数据呈现出来.这里我就介绍说一下利用百度开源的echarts图表技术实现的具体功能. 1.对于不太理解 ...
随机推荐
- 【hbuilder】如何根据Geolocation获得的坐标获取所在城市?
第一步通过mui.plusReady[表示页面加载事件]调用hbuilder提供的百度定位 mui.plusReady(function() { plus.geolocation.getCurrent ...
- Python代码规范与命名规则
1.模块 模块尽量使用小写命名,首字母保持小写,尽量不要用下划线(除非多个单词,且数量不多的情况) # 正确的模块名 import decoder import html_parser # 不推荐的模 ...
- android listview的HeadView左右切换图片(仿新浪,网易,百度等切换图片)
首先我们还是看一些示例:(网易,新浪,百度) 显示效果都不错,可是手感就不一样了,百度最棒,网易还行,新浪就操作很不好,这里我说的是滑动切换图片.自己可以测试一下.不得不说牛叉的公司确实有哦牛叉的道理 ...
- Codeforces 839B - Game of the Rows
839B - Game of the Rows 思路:先放4个的,然后再放2个的,最后再放1个的. 代码: #include<bits/stdc++.h> using namespace ...
- OpenGL入门程序四:颜色模式
1.OpenGL支持两种颜色模式: 1>RGBA颜色模式 ,用 glClearColor 指定清空屏幕后的颜色,即“空颜色” . 2>索引颜色模式,用 glClearIndex 指定清空屏 ...
- Java 常用对象-System类
2017-11-02 21:41:06 System类:System 类包含一些有用的类字段和方法.它不能被实例化. *常用方法 public static void gc() 运行垃圾回收器. 调用 ...
- Selenium之Action Chains类
Action Chains类常用于模拟鼠标的行为,比如单击,双击,拖拽等行为,使用下面的方法导入Action Chains类 from selenium.webdriver.common.action ...
- [Java学习] Java方法重载
在Java中,同一个类中的多个方法可以有相同的名字,只要它们的参数列表不同就可以,这被称为方法重载(method overloading). 参数列表又叫参数签名,包括参数的类型.参数的个数和参数的顺 ...
- 20170228VBA提取邮件部分信息
Sub 获取OutLook收件箱主题和正文() On Error Resume Next Dim sht As Worksheet Dim olApp As Outlook.Application D ...
- codeforces 484a//Bits// Codeforces Round #276(Div. 1)
题意:给出区间[ll,rr],求中间一个数二进制表示时一的个数最多. 写出ll和rr的二进制,设出现第一个不同的位置为pos(从高位到低位),找的数为x,那么为了使x在[ll,rr]内,前pos-1个 ...