我使用的是用目标C编写的库MDWamp,它具有以下类型的属性
@property (nonatomic, strong) void (^deferredWampCRASigningBlock)( NSString *challange, void(^finishBLock)(NSString *signature) );
这是swift中的签名
public var deferredWampCRASigningBlock: ((String!, ((String!) -> Void)!) -> Void)!
当我尝试以下列方式在swift中实例化时
self.wamp?.config.deferredWampCRASigningBlock?(str : String , { (str2 : String) -> Void in
})
但我收到此错误
无法转换类型' String.Type'的值预期的参数类型 '字符串'!
任何建议都将不胜感激。
答案 0 :(得分:8)
这意味着您正在传递数据类型。请传递价值。
答案 1 :(得分:2)
让我们逐步了解deferredWampCRASigningBlock
:
((String!, ((String!) -> Void)!) -> Void)!
这是一个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
// ...
}
答案 2 :(得分: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])