初探swift语言的学习笔记十(block)
在前面一些学习中,原本把闭包给理解成了block虽然有非常多类似之处,但block还是有他自己的独特之外。近日,在写oc/swift混合编码时,有时候须要swift回调oc,oc回调swift 。
因此我把swift中的 block 常见的声明和写法作一个总结。
以免兴许忘了。好查阅。废话不说多,上样例:
//
// blockDemo.swift
// swiftDemo
//
// Created by apple on 14-6-29.
// Copyright (c) 2014年 fengsh. All rights reserved.
// import Foundation //无參无返回值
typealias funcBlock = () -> () //或者 () -> Void
//返回值是String
typealias funcBlockA = (Int,Int) -> String
//返回值是一个函数指针,入參为String
typealias funcBlockB = (Int,Int) -> (String)->()
//返回值是一个函数指针,入參为String 返回值也是String
typealias funcBlockC = (Int,Int) -> (String)->String class blockDemo
{
//block作为属性变量
var blockProperty : (Int,Int) -> String = {a,b in return ""/**/} // 带初始化方式
var blockPropertyNoReturn : (String) -> () = {param in } var blockPropertyA : funcBlockA? //这写法就能够初始时为nil了,由于生命周当中,(理想状态)可能为nil所以用? var blockPropertyB : funcBlockB! //这写法也能够初始时为nil了,由于生命周当中。(理想状态)觉得不可能为nil,所以用! init()
{
println("blockPropertyA = \(blockPropertyA) , blockPropertyB = \(blockPropertyB)")
println("blockProperty = \(blockProperty) , blockPropertyNoReturn = \(blockPropertyNoReturn)")
} func testProperty(tag:Int)
{
switch (tag)
{
case 1:
self.blockPropertyNoReturn("OK GOOD")
case 2:
if let exsistBlock = self.blockPropertyA
{
let result = self.blockPropertyA!(7,8)
println("result = \(result)")
}
case 3:
if let exsistBlock = self.blockPropertyB
{
let fc = self.blockPropertyB(1,2)
fc("输出")
}
default:
let ret = self.blockProperty(3,4)
println(ret)
}
} //block作为函数參数
func testBlock(blockfunc:funcBlock!)//使用!号不须要再解包
{
if let exsistblock = blockfunc
{
blockfunc() //无參无返回
}
} func testBlockA(blockfunc:funcBlockA!)
{
if let exsistblock = blockfunc
{
let retstr = blockfunc(5,6)
println(retstr)
}
} func testBlockB(blockfunc:funcBlockB!)
{
if let exsistblock = blockfunc
{
let retfunc = blockfunc(5,6)
retfunc("结果是")
}
} func testBlockC(blockfunc:funcBlockC!)
{
if let exsistblock = blockfunc
{
let retfunc = blockfunc(5,6)
let str = retfunc("终于果结是")
println(str)
}
}
}
运行測试码:
var bk = blockDemo()
//block设置前,啥也没有输出
bk.testProperty(0)
bk.testProperty(1)
bk.testProperty(2)
bk.testProperty(3)
println("==============设置block属性================") bk.blockProperty = {
(a :Int,b:Int) -> String in
let c = a*100+b
return "\(a)*100+\(b) = \(c)"
}
bk.testProperty(0) bk.blockPropertyNoReturn = {
(param:String) -> () in
println("input param value is : \(param)")
}
bk.testProperty(1) bk.blockPropertyA = {
(a:Int,b:Int) -> String in
let c = a*100+b*200
return "\(a)*100+\(b)*200 = \(c)"
}
bk.testProperty(2) bk.blockPropertyB = {
(a:Int,b:Int) -> (String)->() in
func sumprint(result:String)
{
let c = a + b;
println("sumprint func print:parame :\(result) \(a) + \(b) = \(c)")
} return sumprint
}
bk.testProperty(3)
println("==============属性block完毕================") println("==============函数block为nil时无输出================")
bk.testBlock(nil)
bk.testBlockA(nil)
bk.testBlockB(nil)
bk.testBlockC(nil)
println("==============函数block操作================")
bk.testBlock({
//do something
println("无參无返回值block 运行")
}) bk.testBlockA({
(a:Int,b:Int) -> String in
let c = a*400+b*1000
return "\(a)*400 + \(b)*1000 is \(c)"
}) bk.testBlockB({
(a:Int,b:Int) -> (String)->() in
func sumprint(result:String)
{
let c = a / b;
println("sumprint func print:parame :\(result) \(a) / \(b) = \(c)")
} return sumprint
}) bk.testBlockC({
(a:Int,b:Int) -> (String)->String in
func sumrsult(res:String) -> String
{
let c = a*a+b*a
return "\(res) \(a)*\(a)+\(b)*\(a) = \(c)"
}
return sumrsult
})
以上包含了block声明和使用
以下是输出结果
blockPropertyA = nil , blockPropertyB = nil
blockProperty = (Function) , blockPropertyNoReturn = (Function) ==============设置block属性================
3*100+4 = 304
input param value is : OK GOOD
result = 7*100+8*200 = 2300
sumprint func print:parame :输出 1 + 2 = 3
==============属性block完毕================
==============函数block为nil时无输出================
==============函数block操作================
无參无返回值block 运行
5*400 + 6*1000 is 8000
sumprint func print:parame :结果是 5 / 6 = 0
终于果结是 5*5+6*5 = 55
好了。我想这个比文字语方描写叙述的更为清楚吧。
如有不明确或其他奇怪写法,欢迎踢馆。。
。。。
初探swift语言的学习笔记十(block)的更多相关文章
- 初探swift语言的学习笔记(闭包 - 匿名函数或block块代码)
很多高级语言都支持匿名函数操作,在OC中的block也为大家所熟悉,然面在swift里好像是被重新作了一个定义,不叫匿名函数,或 block了,而叫闭包(closure).下面配合代码来理解一下swi ...
- 初探swift语言的学习笔记(闭包-匿名函数或block块代码)
使用Block的地方很多,其中传值只是其中的一小部分,下面介绍Block在两个界面之间的传值: 先说一下思想: 首先,创建两个视图控制器,在第一个视图控制器中创建一个UILabel和一个UIButto ...
- 初探swift语言的学习笔记三(闭包-匿名函数)
作者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/29353019 转载请注明出处 假设认为文章对你有所帮助,请通过留言 ...
- 初探swift语言的学习笔记四(类对象,函数)
作者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/29606137 转载请注明出处 假设认为文章对你有所帮助,请通过留言 ...
- 初探swift语言的学习笔记七(swift 的关健词)
每一种语言都有相应的关键词,每个关键词都有他独特的作用,来看看swfit中的关键词: 关键词: 用来声明的: “ class, deinit, enum, extension, func, impor ...
- 初探swift语言的学习笔记五(线程)
作者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/30354127 转载请注明出处 假设认为文章对你有所帮助,请通过留言 ...
- 初探swift语言的学习笔记十一(performSelector)
作者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/35842441 转载请注明出处 假设认为文章对你有所帮助,请通过留言 ...
- 初探swift语言的学习笔记四-2(对上一节有些遗留进行处理)
作者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/30314359 转载请注明出处 假设认为文章对你有所帮助,请通过留言 ...
- 初探swift语言的学习—Object-C与Swift混编
swift 语言出来后,可能新的项目直接使用swift来开发,但可能在过程中会遇到一些情况,某些已用OC写好的类或封装好的模块,不想再在swift 中再写一次,哪就使用混编.这个在IOS8中是允许的. ...
随机推荐
- 摘要提取算法——本质上就是pagerank,选择rank最高的句子作为摘要,如果结合word2vec应该有非常好的效果
最近需要做一些文本摘要的东西,选取了TextRank(论文参见<TextRank: Bringing Order into Texts>)作为对比方案,该方案可以很方便的使用Python相 ...
- Python 字典(dict)操作(update)
1. get 注意以下两种形式的细微差别,差别在返回值的类型上: d.get(value, '') d.get(value, ['']) >> d = {} >> d.get( ...
- 2.2Shiro架构
- jQuery hooks源码学习
段落不够清晰,待整理 看jQuery源码的时候,经常见到含有hooks标志的对象,如cssHooks, attrHooks, propHooks, valHooks. 下面对其中的一段进行解读. jQ ...
- C# net winform wpf 发送post数据和xml到网页
由于项目需要发送数据到网页 这里用aspx做测试 采用post以及get发送数据,页面进行数据 首先这个东西很简单很简单,基本上学过的都会,但是原谅一直搞cs几乎不搞bs的猿类吧.三四年没接触bs. ...
- 移动端 fixed 固定按钮在屏幕下方,然后按钮被键盘顶上来...顶上来了有没有~
在移动端 H5 页面开发中,我使用了 fixed 固定某个元素在屏幕的最下方, 这时点击输入框,接着非常非常自然地出现了元素被系统键盘顶起来的情况,如下图. 解决方案: 首先,给页面最外层包裹一层 d ...
- css处理图片下方留白问题
引用图片的时候,图片和下方内容会有一点小空白,大概如下图紫色横条: 不是说有margin还是padding,是因为ing是行级元素,浏览器就会默认留白了,这时候处理方法很简单,给img加上样式disp ...
- 关于电脑安装新硬盘,出现无法是识别设备,03F0问题解答。
问题说明:在添加新的硬盘,切确定硬盘没有坏的情况下,无法识别出新的硬盘. 解决方案: 1.检查bios系统里的安全模式,是否处于开启中.因为在windows 8.1以上的版本中,不开启的情况下只能读取 ...
- [oracle] 递归追溯完整部门名称 函数
create or replace function fn_DeptWholeName2(objectid in number) return nvarchar2 is wholename nvarc ...
- java加密解密算法位运算
一.实例说明 本实例通过位运算的异或运算符 “ ^ ” 把字符串与一个指定的值进行异或运算,从而改变每个字符串中字符的值,这样就可以得到一个加密后的字符串.当把加密后的字符串作为程序输入内容,异或运算 ...