首页 > 其他分享 >iOS开发Swift-闭包

iOS开发Swift-闭包

时间:2023-08-25 17:01:06浏览次数:41  
标签:闭包 s2 s1 iOS names sorted reversedNames Swift

1.闭包表达式语法

{ (参数) -> return 类型 in
    //内容
}
let names = ["C", "A", "E", "B", "D"]
func back(_ s1: String, s2: String) -> Bool {
    return s1 > s2   //(B > A, C > B)
}
//闭包后: var reversedNames.sorted(by: { (s1: String, s2: String) -> Bool in return s1 > s2 })

 2.根据上下文推断类型

reversedNames = names.sorted(by: {s1, s2 in return s1 > s2})
//传入参数的类型确定,: String, : String可省略。传出参数的类型确定: -> Bool可省略

3.单表达式闭包的隐式返回

reversedNames = names.sorted(by: {s1, s2 in s1 > s2})
//只包含一个表达式,省略return之后无歧义,所以可以省略return。

4.参数名称缩写

reversedNames = names.sorted(by: {$0 > $1})
//可按照$0, $1, $2顺序调用闭包函数

5.运算符方法

reversedNames = names.sorted(by: >)

6.尾随闭包

将很长的闭包表达式作为最后一个参数传递给函数,不用写出他的参数标签。

func some(do: () -> Void) {
    //代码
}
//不使用尾随闭包调用函数
some(do: {
    //代码
}
//使用尾随闭包调用函数
some() {
    //语句
}

 

reversedNames = names.sorted() {$0 > $1}
//sorted为函数的唯一方法时,可省略括号
reversedNames = names.sorted {$0 > $1}

7.值捕获

嵌套函数可捕获其外部函数所有参数、变量、常量。

8.逃逸闭包

当一个闭包作为一个参数传到一个函数中,但闭包在函数返回之后才被执行,则称闭包逃逸。

标注@escaping,表示允许闭包逃逸。

var comp: [() -> Void] = []
func some(comp1: @escaping () -> Void) {
    comp.append(comp1)
}

9.自动闭包

 包装传递给函数作为参数的表达式。不接受参数,只返回值。

 延迟求值。直到调用这个闭包,代码才被执行。

var cuL = ["C", "A", "E", "B", "D"]
print(cuL.count)    //5
let cuP = {cuL.remove(at: 0)}
print(cuL.count)    //5。闭包未运行
cuP()     //调用闭包
print(cuL.count)    //4。闭包已运行,第一个值被删除。

 

标签:闭包,s2,s1,iOS,names,sorted,reversedNames,Swift
From: https://www.cnblogs.com/lysboke/p/17657400.html

相关文章

  • iOS开发之--调用打电话,发邮件,发短信的系统功能的代码
    1、调用自带mail[[UIApplicationsharedApplication]openURL:[NSURLURLWithString:@"mailto://[email protected]"]];2、调用电话phone[[UIApplicationsharedApplication]openURL:[NSURLURLWithString:@"tel://8008808888"]];NSMutableString*str=[[NSMutable......
  • iOS开发之--TableViewCell重用机制避免重复显示问题
    常规配置如下当超过tableView显示的范围的时候后面显示的内容将会和前面重复//这样配置的话超过页面显示的内容会重复出现-(UITableViewCell*)tableView:(UITableView*)tableViewcellForRowAtIndexPath:(NSIndexPath*)indexPath{//定义唯一标识staticNSStrin......
  • iOS开发之--苹果个人开发者账号如何升级成公司账号
    1.拨打苹果针对中国区开发者的咨询服务热线:40067018552.简单向对方(中文不太标准,但听懂没问题)说明意图后,会要求提供:(1)之前申请IDP时purchaseform上的personID,EnrollmentID(2)开发者账号,3.对方会直接帮忙升级账户届时会需要提供一些公司相关的资料传真过去,包括:《企业法......
  • iOS开发之--iOS APP打包的时候出现的四个选项
    此为打ipa或发包时的选项,有四:一、个人账号发包所选;   显然,签名并打包程序来发布到iOSAppStore,是个人账户发包所选。二、打云测ipa包;   发布蒲公英内测、云测等所需的ipa,就选这个来打包,注意,要用发布证书;   官网解释:Todistributeyourapptouserswithdesig......
  • iOS开发之--沙盒的操作
    iphone沙箱模型的有四个文件夹,分别是什么,永久数据存储一般放在什么位置,得到模拟器的路径的简单方式是什么.documents,tmp,app,Library。(NSHomeDirectory())手动保存的文件在documents文件里Nsuserdefaults保存的文件在tmp文件夹里1、Documents目录:您应该将所有的应用程序数据文......
  • iOS开发之--从URL加载图片
    +(UIImage*)imageFromURLString:(NSString*)urlstring{//Thiscallissynchronousandblockingreturn[UIImageimageWithData:[NSDatadataWithContentsOfURL:[NSURLURLWithString:urlstring]]];}直接转化一下就可以直接拿到图片!作者:稻草......
  • ios开发之 -- xib关联自定义view
    在xib下使用自定义的view,因为很多时候,可能幸亏自顶一个view,然后在view里面填充控件,但是需要重写很多无用的代码,而且很容易出错不说,还很好工作量,使用xib的话,分钟搞定一个view,话不多说,步骤如下:1,先创建一个view2,创建一个xib3,"File'sOwner"的class继承为:MyView(即自定义创建的视图......
  • ios开发之 -- UIView总结
    如果想调用某个类的某个方法可以写成这样,这个方法来自NSObject类performSelector:performSelector:withObject:performSelector:withObject:withObject: 实际调用[selfperformSelector:@selector(displayViews)withObject:nilafterDelay:1.0f];有三个方法分别是//父视图......
  • ios 开发之 -- UILabel的text竖行显示
    让UILabel的内容竖行显示,我经常用一下两种方式:第一种:使用换行符\nlabel.text=@"请\n竖\n直\n方\n向\n排\n列";label.numberOfLines=[label.textlength];第二种:使用lineBreakMode属性label.text=@"请竖行显示";label.lineBreakMode=NSLineBreakByWordWrapping;//换行模......
  • iOS开发之--搭建本地的SVN服务器
    近期入职的新公司,后台没有分配svn账号,需要在本地搭建一个服务器,方便和代码,看了看网上的教程,一直有这样那样的问题,其中最主要的问题还是路径拼接的问题,最后终于解决了,特在此分享下,如果大家有更快捷的方法可以交流下:步骤如下:1,首先在任意地方建立一个文件夹,如在桌面上建立一个名字为sv......