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

shstlldc  于 2022-11-06  发布在  Swift
关注(0)|答案(5)|浏览(258)

我正在使用一个用objective 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'的值转换为预期的参数类型'String!'
如有任何建议,我们将不胜感激。

afdcj2ne

afdcj2ne1#

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

jfgube3f

jfgube3f2#

让我们了解一下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
    // ...
}
amrnrhlw

amrnrhlw3#

试试这个

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)
    }
r6l8ljro

r6l8ljro4#

您传递的是String.Type,而不是字符串值
而不是:

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

    })

它应该是:

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

        })
1aaf6o9v

1aaf6o9v5#

cell.lblname?.text = String(describing: tasks[indexPath.row])
cell.lbladdress?.text = String(describing: tasks[indexPath.row])
cell.lblphone?.text = String(describing: tasks[indexPath.row])

相关问题