Vij*_*avi 5 iphone ios swift swift2
我正在使用在目标C中编写的库MDWamp,它具有以下类型的属性
@property (nonatomic, strong) void (^deferredWampCRASigningBlock)( NSString *challange, void(^finishBLock)(NSString *signature) );
Run Code Online (Sandbox Code Playgroud)
这是swift中的签名
public var deferredWampCRASigningBlock: ((String!, ((String!) -> Void)!) -> Void)!
Run Code Online (Sandbox Code Playgroud)
当我尝试以下列方式在swift中实例化它时
self.wamp?.config.deferredWampCRASigningBlock?(str : String , { (str2 : String) -> Void in
})
Run Code Online (Sandbox Code Playgroud)
但是我得到了这个错误
无法将'String.Type'类型的值转换为预期的参数类型'String!'
任何建议,将不胜感激.
让我们来看看deferredWampCRASigningBlock是什么:
((String!, ((String!) -> Void)!) -> Void)!
Run Code Online (Sandbox Code Playgroud)
这是一个 void 函数,需要做两件事:
所以当你调用它的时候,你必须把那些东西传递给它。一个字符串和一个函数。
let challenge = "challenge"
let finishBLock: String! -> Void = { signature in }
self.wamp?.config.deferredWampCRASigningBlock?(challenge, finishBlock)
Run Code Online (Sandbox Code Playgroud)
从您的一些评论来看,您似乎不知道challenge此时应该做什么。这表明您不应该调用此函数。该函数旨在由程序中确实知道的部分调用challenge。
这种困惑可能与“当我尝试实例化它时”有关。您给出的代码不会实例化任何内容。它正在尝试调用该函数。也许您真正的意思是创建函数并分配它:
self.wamp?.config.deferredWampCRASigningBlock =
{ (challenge: String!, finishBlock: ((String!) -> Void)!) -> Void in
// ...
}
Run Code Online (Sandbox Code Playgroud)