快速将AnyObject强制转换为Block

詹姆斯·威尔斯

因此,我正在使用Salesforce SDK并为整个SDK构建了桥接头。

它们提供的块语法尚未转换为最有用的代码。例如,

func sendRESTRequest(request: SFRestRequest!, failBlock: SFRestFailBlock!, completeBlock: AnyObject!)

完整的块是AnyObject!。我能够解决这个问题

var block : @objc_block (dataResponse :AnyObject!) -> Void = { dataResponse in //I handle the response}
restService.sendRESTRequest(request, failBlock: { (error :NSError!) -> Void in

        }, completeBlock: unsafeBitCast(block, AnyObject.self))

到目前为止,一切正常。但是,现在我正在尝试为此代码构建单元测试。我为SFRestAPI创建了一个模拟类,该类是函数“ sendRESTRequest”所在的类。为了进行测试,我试图通过传递将从REST服务返回的模拟“数据”来模拟completeBlock:参数。

class MockSFRestAPI : SFRestAPI {

    override func sendRESTRequest(request: SFRestRequest!, failBlock: SFRestFailBlock!, completeBlock: AnyObject!) {
        //Convert complete block into a closure and pass in some test data
    }
}

问题是,我无法投射AnyObject!到一个像我能够像上面那样将其转换为AnyObject的块。

我的一些尝试是:

var block = completeBlock as @objc_block (AnyObject! -> Void)
var block2: (AnyObject! -> Void) = unsafeBitCast(completeBlock, (@objc_block (AnyObject! -> Void)))

还有更多的尝试,但这是仅有的两个看起来比较理智的尝试。那么,在Swift中这可能吗?问题似乎是我无法为unsafeBitCast方法的第二个参数提供闭包“类型”。我想将其转换为闭包,以便可以在我的模拟方法中调用它并传递一些虚假数据。

神圣的灵魂

解决这种情况的最佳方法是为您的代码块创建自己的类型别名:

 typealias MyFunBlock = @objc_block (dataResponse :AnyObject!) -> Void;

然后,您可以将其用于unsafebitcast:

var block: MyFunBlock = unsafeBitCast(completeBlock, MyFunBlock.self) as MyFunBlock;

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

快速将AnyObject(浮点型)向下转换为字符串

来自分类Dev

快速将NSTimeInteval转换为NSDate

来自分类Dev

快速将字典值转换为类型

来自分类Dev

无法快速将NSData转换为NSString

来自分类Dev

快速将时间转换为时间

来自分类Dev

快速将数字转换为文本

来自分类Dev

如何快速将Int转换为int?

来自分类Dev

如何快速将NSURL转换为CFURL?

来自分类Dev

快速将NSData转换为sockaddr结构

来自分类Dev

快速将枚举转换为NSNumber

来自分类Dev

快速将NSNumber的对象转换为Double

来自分类Dev

如何快速将UInt转换为Int?

来自分类Dev

如何快速将PFFile转换为UIImage?

来自分类Dev

快速将[String?]转换为[String!]

来自分类Dev

快速将CGMutablePath转换为MKPolygon

来自分类Dev

快速将Int []转换为Int变量

来自分类Dev

快速将String转换为NSDate返回nil

来自分类Dev

快速将许多行转换为json字符

来自分类Dev

快速将字符转换为字符串

来自分类Dev

快速将Unix时间转换为日期和时间

来自分类Dev

快速将UIImage转换为字节数组

来自分类Dev

快速将数组转换为JSON字符串

来自分类Dev

快速将Objective-C块转换为闭包

来自分类Dev

快速将Parse.com json数组转换为Array

来自分类Dev

如何快速将熊猫数据框行转换为ordereddict

来自分类Dev

快速将String转换为CLLocationCoordinate2D

来自分类Dev

快速将因子转换为分类数据中的数字

来自分类Dev

如何快速将Int32值转换为CGFloat?

来自分类Dev

iOS:快速将UnsafeMutablePointer <Int8>转换为String?