Cast closures/blocks

前端 未结 4 1822
粉色の甜心
粉色の甜心 2020-12-05 15:35

In Objective-C, I often pass around blocks. I use them very often to implement patterns that help avoid storing stuff into instance variables, thus avoiding threading/timing

4条回答
  •  攒了一身酷
    2020-12-05 16:00

    All you need to do is use reinterpretCast to perform force cast.

    (reinterpretCast(completion) as (@objc_block Void -> Void))()
    

    from REPL

      1> import Foundation
      2> var block : @objc_block Void -> Void = { println("test")}
    block: @objc_block Void -> Void =
      3> var obj = reinterpretCast(block) as AnyObject // this is how to cast block to AnyObject given it have @objc_block attribute
    obj: __NSMallocBlock__ = {}
      4> var block2 = reinterpretCast(obj) as (@objc_block Void -> Void)
    block2: (@objc_block Void -> Void) =
      5> block2()
    test
      6>  
    

提交回复
热议问题