当前位置: 首页 > news >正文

如何建设国际网站首页数据分析师报考官网

如何建设国际网站首页,数据分析师报考官网,武汉网站建设德升,大良做网站当闭包作为一个实际参数传递给一个函数的时候,并且它会在函数返回之后调用我们就说这个闭包逃逸了,当你声明一个接受闭包作为形式参数的函数时,你可以在形式参数前写escaping来明确闭包是允许逃逸的。 闭包可以逃逸的一种方法是被存储在定义…

当闭包作为一个实际参数传递给一个函数的时候,并且它会在函数返回之后调用我们就说这个闭包逃逸了,当你声明一个接受闭包作为形式参数的函数时,你可以在形式参数前写@escaping来明确闭包是允许逃逸的。

闭包可以逃逸的一种方法是被存储在定义与函数外的变量里,比如说,很多函数接受闭包实际参数来作为启动异步任务的回调。函数在启动任务后返回,但是闭包要直到任务完成--闭包需要逃逸,以便于稍后调用

//: A UIKit based Playground for presenting user interfaceimport UIKit
var completionHansdlsers:[()-> Void] = []
func someFuntionWIthEscapingClosure(completionHandler:@escaping ()->Void){completionHansdlsers.append(completionHandler)
}

让闭包@escaping 意味着你必须在闭包中显示地引用self

//: A UIKit based Playground for presenting user interfaceimport UIKit
var completionHansdlsers:[()-> Void] = []
func someFuntionWIthEscapingClosure(completionHandler:@escaping ()->Void){completionHansdlsers.append(completionHandler)
}func someFuntionWithNoneScapingClosure(closure:()->Void){closure()
}class SomeClass{var x = 10func doSomething(){someFuntionWIthEscapingClosure {self.x=100}someFuntionWithNoneScapingClosure {x=200}}
}let instance = SomeClass()
instance.doSomething()
print(instance.x)
//200
completionHansdlsers.first?()
print(instance.x)
//100

自动闭包

自动闭包是一种自动创建的用来把作为实际参数传递给函数的表达式打包的闭包。它不接受任何实际参数,并且当它被调用时,它会返回内部打包的表达式的值

这个语法的好处在于通过写普通表达式代替显示闭包而使你省略保卫函数形式参数的括号

下面代码不能执行。。。是系统的源码

autoclosure 就是自动闭包

//: A UIKit based Playground for presenting user interfaceimport UIKit
public func assret(_ condition:@autoclosure() -> Bool,_ message:@autoclosure() -> String = String(),file:StaticString=#file ,line:UInt = #line
let number = 3
assert(number > 3,"number不大于3")

自动闭包允许你延迟处理,因此闭包内部的代码直到你调用它的时候才会运行,对于有副作用或者占用资源的代码来说很有作用。

因为它可以允许你控制代码何时才进行求值

//: A UIKit based Playground for presenting user interfaceimport UIKit
var customersInLine = ["Chris","Alex","Ewa","Barry","Daniella"]
//54  06:03
print(customersInLine.count)
//相当于没有执行
let customProvider = {customersInLine.remove(at: 0)}
print(customersInLine.count)
//调用闭包表达式的时候才真正执行
print("Now serving \(customProvider())!")print(customersInLine.count)

当你传一个闭包作为实际参数到函数的时候,你会得到与延迟处理相同的行为。

//: A UIKit based Playground for presenting user interfaceimport UIKit
var customersInLine = ["Chris","Alex","Ewa","Barry","Daniella"]//相当于没有执行
let customProvider = {customersInLine.remove(at: 0)}func serve(custom customerProvider:() ->String){print("Now serving\(customerProvider())!")
}
serve(custom: {customersInLine.remove(at: 0)})

自动闭包

通过@autoclosure标志标记它的形式参数使用了自动闭包,现在你可以调用函数就像它接受了一个Sting 实际参数而不是闭包。实际参数自动地转换为闭包,因为customerProvider形式参数的类型被标记为 @autocloseure 标记

//: A UIKit based Playground for presenting user interfaceimport UIKit
var customersInLine = ["Chris","Alex","Ewa","Barry","Daniella"]//相当于没有执行
let customProvider = {customersInLine.remove(at: 0)}func serve(custom customerProvider:@autoclosure() ->String){print("Now serving \(customerProvider())!")
}
serve(custom: customersInLine.remove(at: 0))

自动+逃逸

如果你想要自动闭包允许逃逸,就同时使用@autoclosure 和@escaping标志

//: A UIKit based Playground for presenting user interfaceimport UIKit
var customersInLine = ["Chris","Alex","Ewa","Barry","Daniella"]
var customerProviders:[()->String]=[]func collectCustomerProviders(_ customerProvider:@autoclosure @escaping()->String){customerProviders.append(customerProvider)
}
collectCustomerProviders(customersInLine.remove(at: 0))
collectCustomerProviders(customersInLine.remove(at: 0))print("Collecte d\(customerProviders.count) closures")
//prings "Collected 2 closures"for customerProvider in customerProviders{print("Now serving \(customerProvider())!")
}
Collecte d2 closures
Now serving Chris!
Now serving Alex!

 

http://www.lbrq.cn/news/2566675.html

相关文章:

  • 徐州做网站的哪个好在线外链工具
  • 网站如何关闭2019网站seo
  • 沈阳男科医院哪家医院好seo软件优化
  • wordpress 代做网站拓客平台有哪些
  • 中国建设银行网站 公司机构客户佛山网站建设公司
  • 网站集约化平台建设分析专业网站优化
  • 12380网站建设情况汇报深圳网络推广引流
  • 建设一个旅游网站毕业设计百度店铺怎么入驻
  • wordpress 页面开发教程马鞍山网站seo
  • 河南代做网站semikron
  • 厦门建设与管理局网站优化系统的软件
  • 狗和人做愛网站谁知道好推建站
  • 北京建站公司哪个好百度识图在线使用一下
  • 网站的构造西安今天刚刚发生的新闻
  • 如何做企业网站及费用问题网站优化推广哪家好
  • 外贸网站个性设计百度seo引流怎么做
  • 泰州住房城乡建设网站怎样注册网站
  • 网站建设自己在家接单上海网站建设推广服务
  • 南京做网站哪家公司最好网络推广方法大全
  • 门户网站开发需求分析浙江网站推广公司
  • 企业网站颜色如何免费创建自己的网站平台
  • 个人网站要怎么做特色产品推广方案
  • 什么是网站抄袭免费建网站
  • 微网站栏目设置游戏交易平台
  • 张家口建设部网站2023年10月爆发新冠
  • 注册公司代理记账费用朝阳seo建站
  • 电子商务网站建设视频教程最新旅游热点
  • 做网站应该用什么镜像百度排名软件
  • 成都房地产网搜索引擎优化实训
  • 有什么网站可以做java算法免费模板素材网站
  • Docker 的网络模式
  • 【数据结构初阶】--排序(二)--直接选择排序,堆排序
  • 能力显著性向量:验证损失与下游能力的缩放定律
  • day38 力扣279.完全平方数 力扣322. 零钱兑换 力扣139.单词拆分
  • linux中posix消息队列的使用记录
  • 系统开机时自动执行指令