无法转换类型' String.Type'的值预期的参数类型'字符串!'

时间:2015-11-23 11:09:58

标签: ios iphone swift swift2

我使用的是用目标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'的值预期的参数类型   '字符串'!

任何建议都将不胜感激。

4 个答案:

答案 0 :(得分:8)

这意味着您正在传递数据类型。请传递价值。

答案 1 :(得分:2)

让我们逐步了解deferredWampCRASigningBlock

((String!, ((String!) -> Void)!) -> 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])