import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// 无参无返回值
// demo1()
// demo2()
// demo3()
// 有参数无返回值
// lengthOfString(a: "1111", b: "2222")
// 无参数有返回值
// let str = demo()
// print(str)
// 有参数有返回值
// let str = demo6(a: "323", b: "121")
// print("str = \(str)")
// 闭包
// 1.无参无返回值
// closure()
// 2.有参数有返回值
// closure1("123")
// 3.无参数有返回值
// let str = closure2()
// print(str)
// 4.有参数有返回值
// let str1 = closure3("123","456")
// print(str1)
let length = newStringLength("world") { (a) -> String in
let b = "hello\(a)"
return b
}
print("length = \(length)")
}
// swift 里面允许函数嵌套,并且外部不可见
// 调用的时候尽量不采用 self
// 类名调用的函数前面加上 class
// 如果一个类只要求在本类中调用,不希望外部可见,就加上 private,UI 空间的响应时间不要加上 private 修饰
// 无参无返回值
// 格式: func 函数名 (){}
func demo1(){
print("无参无返回值1")
func demo4(){
print("------------")
}
demo4()
}
func demo2()->(){
print("无参无返回值2")
}
func demo3()->Void{
print("无参无返回值3")
}
// 有参数无返回值
// 格式: func 函数名 (外部返回参数 参数:参数类型...){}
// 非第1个参数如果没有外部访问参数的话会将形参当成外部访问参数
func lengthOfString(a str1:String,b str2:String){
print("\(str1)和\(str2)的长度是\(str1.characters.count + str2.characters.count)")
}
// 无参数有返回值
func demo()->String{
return "66666"
}
// 有参数有返回值
// 格式: func 函数名(参数列表...)->返回值类型{}
func demo6(a a:String,b:String)->String{
let c = "\(a)\(b)"
return c
}
// 闭包
// 闭包相当于 C 里面的 block,封装了一段有特定功能的代码块
// 闭包一样可以当成函数参数
// 闭包的格式:
/*
{
(参数列表...)->返回值类型
in
闭包里面执行的代码块
}
*/
// 无参数无返回值
let closure = {
()->()
in
print("这是一个无参无返回值的闭包")
}
// 有参数有返回值
let closure1 = {
(str:String)->()
in
print("这是一个输入参数为\(str)的闭包")
}
// 无参数有返回值
let closure2 = {
()->Int
in
let string = "666666"
return string.characters.count
}
// 有参数有返回值
let closure3 = {
(str1:String,str2:String)->Int
in
let string = "\(str1)\(str2)"
return string.characters.count
}
// 定义一个函数:两个输入参数,其中一个是闭包,闭包的功能,是将输入的第一个参数拼接上 Hello, 返回一个新的字符串.函数的功能返回新字符串的长度
func newStringLength (str:String,closure4:(a:String)->String)->Int
{
let str = closure4(a: str)
return str.characters.count
}