{ (parameters/接收的参数) -> (return type/闭包返回值类型) in
statements/保存在闭包中需要执行的代码
}
//为没有参数也没有返回值的闭包类型起一个别名 typealias Nothing = () -> () //如果闭包的没有返回值,那么我们还可以这样写, typealias Anything = () -> Void //为接受一个Int类型的参数不返回任何值的闭包类型 定义一个别名:PrintNumber typealias PrintNumber = (Int) -> () //为接受两个Int类型的参数并且返回一个Int类型的值的闭包类型 定义一个别名:Add typealias Add = (Int, Int) -> (Int)
//为(_ num1: Int, _ num2: Int) -> (Int) 类型的闭包定义别名:Add
typealias Add = (_ num1: Int, _ num2: Int) -> (Int)
//创建一个 Add 类型的闭包常量:addCloser1
let addCloser1: Add
//为已经创建好的常量 addCloser1 赋值
addCloser1 = {
(_ num1: Int, _ num2: Int) -> (Int) in
return num1 + num2
}
//调用闭包并接受返回值
let result = addCloser1(20, 10)
//创建一个 (_ num1: Int, _ num2: Int) -> (Int) 类型的闭包常量:addCloser1
let addCloser1: (_ num1: Int, _ num2: Int) -> (Int)
//为已经创建好的常量 addCloser1 赋值
addCloser1 = {
(_ num1: Int, _ num2: Int) -> (Int) in
return num1 + num2
}
//调用闭包并接受返回值
let result = addCloser1(20, 10)
//创建一个 (Int, Int) -> (Int) 类型的闭包常量:addCloser1
let addCloser1: (Int, Int) -> (Int)
//为已经创建好的常量 addCloser1 赋值
addCloser1 = {
(num1, num2) in
return num1 + num2
}
//调用闭包并接受返回值
let result = addCloser1(20, 10)
//创建一个 (Int, Int) -> (Int) 类型的闭包常量:addCloser1 并赋值
let addCloser1: (Int, Int) -> (Int) = {
(num1, num2) in
return num1 + num2
}
//调用闭包并接受返回值
let result = addCloser1(20, 10)
//创建一个 () -> (String) 类型的闭包常量:addCloser1 并赋值
let addCloser1: () -> (String) = {
return "这个闭包没有参数,但是有返回值"
}
//调用闭包并接受返回值
let result = addCloser1()
//创建一个 (String, String) -> (String) 类型的闭包常量:addCloser1 并赋值
let addCloser1: (String, String) -> (String) = {
return "闭包的返回值是:\($0),\($1)"
}
//调用闭包并接受返回值
let result = addCloser1("Hello", "Swift!")
import UIKit
class SecondViewController: UIViewController {
//输入文本框
@IBOutlet weak var textField: UITextField!
//为创建一个(String) -> () 的可选类型的闭包变量作为控制器的属性
var closer: ((String) -> ())?
//返回按钮的点击事件
@IBAction func backButtonDidClick(_ sender: AnyObject) {
//首先判断closer闭包是否已经被赋值,如果已经有值,直接调用该闭包,并将输入的文字传进去。
if closer != nil {
closer!(textField.text!)
}
navigationController?.popViewController(animated: true)
}
}
import UIKit
class FirstViewController: UIViewController {
//显示文字的label
@IBOutlet weak var label: UILabel!
//重写这个方法
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
//拿到跳转的目标控制器
let secondVC = segue.destination as! SecondViewController
//为目标控制器的闭包属性赋值
secondVC.closer = {
//将闭包的参数(输入的文本内容)显示在label上
self.label.text = $0
}
}
}
//为接受一个Int类型的参数并且返回一个Int类型的值的闭包类型定义一个别名:Number
typealias Number = (num1: Int) -> (Int)
//定义一个接收Number类型的参数没有返回值的方法
func Text(num: Number) {
//code
}
//拼接两个字符串和一个整数
func combine(handle:(String, String) -> (Void), num: Int) {
handle("hello", "world \(num)")
}
//方法调用
combine(handle: { (text, text1) -> (Void) in
print("\(text) \(text1)")
}, num: 2016)
func combine1(num:Int, handle:(String, String)->(Void)) {
handle("hello", "world \(num)")
}
combine1(num: 2016) { (text, text1) -> (Void) in
print("\(text) \(text1)")
}
func combine2(handle:(String, String)->(Void)) {
handle("hello", "world")
}
combine2 { (text, text1) -> (Void) in
print("\(text) \(text1)")
}
func request(methodType:RequestMethodType, urlString: String, parameters: [String : AnyObject], completed: @escaping (AnyObject?, NSError?) -> ()) {
// 1.封装成功的回调
let successCallBack = { (task : URLSessionDataTask?, result : Any?) -> Void in
completed(result as AnyObject?, nil)
}
// 2.封装失败的回调
let failureCallBack = { (task : URLSessionDataTask?, error : Error?) -> Void in
completed(nil, error as NSError?)
}
//判断是哪种请求方式
if methodType == .get {
get(urlString, parameters: parameters, success: successCallBack, failure: failureCallBack)
} else {
post(urlString, parameters: parameters, success: successCallBack, failure: failureCallBack)
}
}
import UIKit
class ThirdViewController: UIViewController {
var callBack: ((String) -> ())?
override func viewDidLoad() {
super.viewDidLoad()
printString { (text) in
print(text)
//闭包中捕获了self
self.view.backgroundColor = UIColor.red
}
}
func printString(callBack:@escaping (String) -> ()) {
callBack("这个闭包返回一段文字")
//控制器强引用于着callBack
self.callBack = callBack
}
deinit {
print("ThirdViewController---释放了")
}
}
import UIKit
class ThirdViewController: UIViewController {
var callBack: ((String) -> ())?
override func viewDidLoad() {
super.viewDidLoad()
//将self申明为弱引用类型,打破循环引用
weak var weakSelf = self
printString { (text) in
print(text)
//闭包中铺捕获了self
weakSelf?.view.backgroundColor = UIColor.red
}
}
func printString(callBack:@escaping (String) -> ()) {
callBack("这个闭包返回一段文字")
//控制器强引用于着callBack
self.callBack = callBack
}
deinit {
print("ThirdViewController---释放了")
}
}
import UIKit
class ThirdViewController: UIViewController {
var callBack: ((String) -> ())?
override func viewDidLoad() {
super.viewDidLoad()
printString {[weak self] (text) in
print(text)
self?.view.backgroundColor = UIColor.red
}
}
func printString(callBack:@escaping (String) -> ()) {
callBack("这个闭包返回一段文字")
//控制器强引用于着callBack
self.callBack = callBack
}
deinit {
print("ThirdViewController---释放了")
}
}
import UIKit
class ThirdViewController: UIViewController {
var callBack: ((String) -> ())?
override func viewDidLoad() {
super.viewDidLoad()
printString {[unowned self] (text) in
print(text)
self?.view.backgroundColor = UIColor.red
}
}
func printString(callBack:@escaping (String) -> ()) {
callBack("这个闭包返回一段文字")
//控制器强引用于着callBack
self.callBack = callBack
}
deinit {
print("ThirdViewController---释放了")
}
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有