2015-11-23 112 views
3

我在迅速无法将类型'String.Type'的值转换为期望的参数类型'String!'

public var deferredWampCRASigningBlock: ((String!, ((String!) -> Void)!) -> Void)! 

使用写入目标C库MDWamp,它有以下类型

@property (nonatomic, strong) void (^deferredWampCRASigningBlock)(NSString *challange, void(^finishBLock)(NSString *signature)); 

此的一个属性的签名,当我尝试实例它迅速通过以下方式

self.wamp?.config.deferredWampCRASigningBlock?(str : String , { (str2 : String) -> Void in 

     }) 

,但我得到这个错误

无法将'String.Type'类型的值转换为预期的参数类型 'String!'

任何意见,将不胜感激。

回答

2

让我们通过什么deferredWampCRASigningBlock是走路:

((String!, ((String!) -> Void)!) -> Void)! 

这是一个void函数,它接受了两两件事:

  • a String!
  • 一个带字符串的void函数!

所以当你打电话给它的时候,你必须把它传递给它。一个字符串和一个函数。

let challenge = "challenge" 
let finishBLock: String! -> Void = { signature in } 
self.wamp?.config.deferredWampCRASigningBlock?(challenge, finishBlock) 

从你的一些评论,你似乎不知道什么challenge应该在这一点上。这表明你不应该调用这个函数。这个功能是打算被确实知道challenge的程序部分调用的。

混淆可能与“当我试图实例化它”有关。你给出的代码没有实例化任何东西。它试图调用该函数。也许你真正的意思是创建功能并为其分配:

self.wamp?.config.deferredWampCRASigningBlock = 
    { (challenge: String!, finishBlock: ((String!) -> Void)!) -> Void in 
    // ... 
} 
+0

非常感谢你...你拯救了我的一天 –

0

You'r passing String.Type不是字符串值

相反的:

self.wamp?.config.deferredWampCRASigningBlock?(str : String , { (str2 : String) -> Void in 

    }) 

它应该是:

self.wamp?.config.deferredWampCRASigningBlock?(str : "some string" , { (str2 : String) -> Void in 

     }) 
+0

我编辑了你的文章,代码格式正确,请检查出来。 –

1

试试这个

 self.wamp?.config.deferredWampCRASigningBlock = {(challenge: String!, finishBlock) -> Void in 
//calculate signature using any algorithm and return in finishBlock see below example 
        let sign = challenge.hmacSHA256DataWithKey(“secretKey”) 
        finishBlock(sign) 
    } 
3

这意味着你要传递的数据类型。请传递价值。

-2
cell.lblname?.text = String(describing: tasks[indexPath.row]) 
cell.lbladdress?.text = String(describing: tasks[indexPath.row]) 
cell.lblphone?.text = String(describing: tasks[indexPath.row]) 
相关问题