block传如字段拼接字符串返回(Bd interview)

平时经常用的为什么手写不出来,因为模板根本没放心里记住,很难么,并不是,显然是懒惰的原因.

(返回值类型)(^block名称)(参数类型) = ^(参数) {};

OC写法

  NSDictionary *dic = @{@"1":@"abc",@"2":@"234"};

    NSString *(^MHBlock)(NSDictionary *) = ^(NSDictionary * dic) {
        
        NSArray *keys = dic.allKeys;
        NSMutableArray *valueArray = [NSMutableArray array];
        for (NSString *item in keys) {
            [valueArray addObject:[NSString stringWithFormat:@"%@=%@",item,dic[item]]];
        }
       NSString *resultStr = [valueArray componentsJoinedByString:@"&"];
        return resultStr;
        
    };
    
    MHBlock(dic);

Swift写法

{(参数) ->(返回值类型) in statements }

       // 第一个不重复的字符
        let dic = ["1":"abc", "2":"cdf"];
        let mhfBlock:((Dictionary<String, String>)->(String))!
        
        mhfBlock = {(result) ->(String) in
            let mhf = result.keys
            var strArray = [String]()
            for item in mhf {
                strArray.append("\(item)=\(dic[item]!)")
            }
           let str = strArray.joined(separator: "&")
            return str
            
        }
    
        mhfBlock(dic)

闭包格式

{(parameters) -> returnType in
	statements
}
func testMhfClosure() {
	let names = ["chari", "alex", "Ea"];
	func backward(_ str1: String, _ str2: String) -> Bool {
		return str1 > str2
	}
	
	// sorted函数的参数是一个闭包,下面传了一个方法名,由此说明:嵌套函数是一个有名字但并可以捕获其封闭函数域内值的闭包
	var reversedName = names.sorted(by:backward)

    // 普通闭包格式:(参数: 参数类型,...) -> 返回值类型 in ...
	reversedNames = names.sorted(by:{(_ str1: String, _ str2: String) -> Bool in return str1 > str2})
	
	// 根据Swift的类型推断,参数类型及参数括号可以去掉,返回值类型可以去掉
	reversedNames = names.sorted(by:{str1, str2 in return str1 > str2})
	
	// 单行表达式:可以去掉return
	reversedNames = names.sorted(by:{str1, str2 in str1 > str2})

 // 使用参数名缩写:参数和in也可以去掉
	reversedNames = names.sorted(by:{$0 > $1})
 // 使用运算符:因为Swift中为字符串重载了大于号小于号
	reversedNames = names.sorted(by:>)

// 使用尾随闭包:前提是闭包必须是函数的最后一个参数
    reversedNames = names.sorted(){$0 > $1}
 // 使用尾随闭包:闭包是函数唯一参数时,可以省掉参数括号
	reversedNames = names.sorted {$0 < $1}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值