Swift 闭包与AnyObject的互转

作者: WonderChang | 来源:发表于2016-07-15 17:52 被阅读267次

在习惯了原来的OC开发,可能将多个block做为函数参数,亦或是存入集合类型(NSDictionary、NSArray)的实例中,但在Swift中将闭包存入一个Dictionary或Array中是不行的。其解决方案是用 unsafeBitCast 函数将Swift闭包转为Objective-C的兼容的对象,如下:

//使用`@convention(block)` 关键字,Swift2.0以后@objc_block属性由@convention(block)取代。
typealias CompletionBlock = @convention(block) () -> Void

        let aBlock:CompletionBlock = {
            print("Hello world!")
        }
        let nsArray = NSMutableArray()
        let blockObject = unsafeBitCast(aBlock, AnyObject.self)
        nsArray.addObject(blockObject)
        
        let closureObject = nsArray[0]
        let closure = unsafeBitCast(closureObject, CompletionBlock.self)
        closure()

相关文章

  • Swift 闭包与AnyObject的互转

    在习惯了原来的OC开发,可能将多个block做为函数参数,亦或是存入集合类型(NSDictionary、NSArr...

  • Swift 闭包与AnyObject的互转

    在习惯了原来的OC开发,可能将多个block做为函数参数,亦或是存入集合类型(NSDictionary、NSArr...

  • Swift学习笔记(1)

    SWift学习笔记 闭包 闭包表达式 闭包是自包含的函数代码块,可以在代码中被传递和使用。Swift 中的闭包与 ...

  • swift 闭包(闭包表达式、尾随闭包、逃逸闭包、自动闭包)

    闭包是自含的函数代码块,可以在代码中被传递和使用 闭包和swift的对比 Swift 中闭包与OC的 block ...

  • Swift将闭包封装为Anyobject

    let yourClosures:@convention(block) ( )->(Void) = { } let...

  • swift中的闭包

    swift中的闭包 闭包是自包含的函数代码块,可以在代码中被传递和使用。swift中的闭包与C和Objective...

  • 闭包

    闭包 本节内容包括: 闭包表达式 尾随闭包 值捕获 闭包是引用类型 Swift 中的闭包与 C 和 Objecti...

  • Swift-闭包

    Swift 闭包 函数 ()->() Swift 中的闭包和 Objective-C 中的 block 类似,闭包...

  • Swift闭包和函数

    函数在Swift中只是一种特殊的闭包,闭包在Swift语言中是一等公民,支持闭包嵌套和闭包传递。Swift中的闭包...

  • Swift学习:闭包

    本篇将详细总结介绍Swift闭包的用法;闭包是自包含的函数代码块,可以在代码中被传递和使用。Swift中的闭包与C...

网友评论

    本文标题:Swift 闭包与AnyObject的互转

    本文链接:https://www.haomeiwen.com/subject/nqdyjttx.html