ios深度解析之Swift(函数)
2015-10-23 21:50
441 查看
// 函数 // 语法格式 //func name (参数列表) -> 返回值 { // // 函数实现体 //} // .无参, 无返回值 func hello1() { print("hello1"); } func hello2() -> Void { print("hello2") } // 函数调用 hello1()
// .有参
// 1,关于内部参数名
// 只在函数作用域内部使用的参数名
func hello3 (name: String , name2: String) {
print("你好\(name) and \(name2)")
}
// 除了第一个参数 后面的参数在调用的时候会自动生成一个与外部参数名相同的外部参数名
// 原则上 第一个参数的外部参数名应该写在函数名的末尾
hello3("小林林", name2: "猪八戒")
func hello4 (mingzi1 name: String, mingzi2 name2: String) {
print("你好\(name) and \(name2)")
}
// 内部参数名的添加规则 在外部参数名前面声明中间用空格隔开
hello4(mingzi1: "小林林", mingzi2: "猪八戒")
// 使用占位符 _ 省略掉自动生成的外部参数名
func hello5 (name: String,_ name2: String) {
print("你好 \(name) and \(name2)")
}
hello5("小林林", "猪八戒")
// 可以为参数赋初始值 调用时传参则更改 不传参使用初始值
func hello6 (name: String = "张三", name2: String = "李四") {
print("你好 \(name) and \(name2)")
}
//hello6()
hello6(name2:"王五")
// 有返回值情况 // 返回值直接给类型 func hi1() ->String { return "hehehheheh" } hi1() // 输出元音和辅音个数 func count (tempStr: String) -> (Int , Int) { var number1:Int = 0 var number2:Int = 0 for num in tempStr.characters { switch num { case "a", "e", "i", "o", "u": number1++ default: number2++ } } return (number1, number2) } count("gerageargshshsshsthjstjhshshnaiou")
// 不确定参数个数. 参数个数可变 func count2 (numbers:Int...) ->Int { var sum = 0 // 不确定个数的参数, 作为数组使用 for num in numbers { sum += num } return sum } count2(1,2,3,4,5,6) // 参数在函数体内 默认是不可变的,用var修饰之后才可变 func count3 (var a:Int, b:Int) -> Int { // a += b a++ // b++ return a } var c = 10 count3(c , b: 0) // inout 修饰参数 将外部变量的地址传进来 从而改变外部变量的值 func changeValue (inout a:Int) { a++ } changeValue(&c) c
//声明一个函数 实现功能 传入 "+", "-", "/".的字符串 返回对应运算的函数 : "+" --- 返回 Int + Int = Int // 函数的返回值是函数 可以用函数嵌套的形式实现 但并不是必须使用函数嵌套 // 方法一 func hello3(i:String)-> ((Int, Int) -> Int) { func sum(a:Int, b:Int) -> Int { switch i { case "+": return a + b case "-": return a - b case "/": return a / b case "*": return a * b default: return 0 } } return sum } let hanshu1 = hello3("+") hanshu1(1, 2) let hanshu2 = hello3("-") hanshu2(1, 2) let hanshu3 = hello3("*") hanshu3(1, 2) let hanshu4 = hello3("/") hanshu4(4, 2) let hanshu5 = hello3("+") let result = hanshu5(1, 2) // 方法二 func sum1(a:Int, b:Int) -> Int { return a - b } func sum2(a:Int, b:Int) -> Int { return a + b } func sum3(a:Int, b:Int) -> Int { return a * b } func sum4(a:Int, b:Int) -> Int { return a / b } func hello3(i:String)-> ((Int, Int) -> Int)? { switch i { case "+": return sum2 case "-": return sum1 case "/": return sum3 case "*": return sum4 default: return nil } } let han = hello3("+") let result = han!(1, 2)
// 指定类型别名 typealias funcType = ((Int, Int) ->Int) typealias funcType2 = String func func3 () ->funcType { func hanshu3(num1: Int, num2: Int) -> Int { return 0 } return hanshu3 }
// ++++++++++++++++++++++++ 闭包: 相当于block
// 闭包 又叫做 匿名函数
//{
//
// (参数列表) -> 返回值 in 函数的实现体
//}
// 使用系统排序函数对闭包的省略机制进行说明
var numbers = [11, 44, 33, 66, 22]
var numbers_result = numbers.sort({
(n1:Int, n2:Int)-> Bool in
return n1 > n2
})
// 闭包的参数类型可以省略
// 根据上下文进行类型推断
var numbers_result1 = numbers.sort({
(n1, n2)-> Bool in
return n1 > n2
})
// in 前面的语句 可以省略
// 此时 没有参数名 自动生成$0, $1 进行替代
var numbers_result2 = numbers.sort({
return $0 > $1 // 此处 return也可以省略
})
// return 也可以省略 条件是:函数实现体内只有return语句
var numbers_result3 = numbers.sort({
$0 > $1 // 此处 return也可以省略
})
// 极简模式
var numbers_result4 = numbers.sort(>)
// +++++++++++以上是闭包的省略机制
// 尾随闭包
// 当闭包作为参数列表的最后一个参数时 并且内容相对复杂 可以尾随在参数列表的外面
var numbers_result5 = numbers.sort(){
(n1, n2)-> Bool in
return n1 > n2
}
typealias myType = ((String) -> String)
func getPigName(name:String)-> String {
return "pig = \(name)"
}
func pig(canshu:myType)->myType {
return getPigName
}
pig({
(name:String)-> String in
return "pig = \(name)"
})
// 闭包常用于参数 函数常用于返回值
// "3" + "4" = "7"
// "3" + "4" = 7
typealias myType2 = ((String, String) -> Int)
func closure (clo:myType2) ->String {
let result_clo = clo("3" , "4")
return result_clo.description // 转成字符串
}
closure({
(a:String, b:String)-> Int in
return Int(a)! + Int(b)!
})
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- Apple Swift学习教程
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- Mootools 1.2教程 函数
- autoit InputBox 函数
- 文件遍历排序函数
- Oracle 函数大全[字符串函数,数学函数,日期函数]第1/4页
- ASP下经常用的字符串等函数参考资料
- PostgreSQL教程(五):函数和操作符详解(1)
- DOS批处理 函数定义与用法
- asp Chr 函数 数字转字母的方法
- Lua中的函数精讲笔记
- Lua中的闭合函数、非全局函数与函数的尾调用详解
- Lua中调用C++函数示例