【发布时间】:2018-02-07 14:39:20
【问题描述】:
我正在调用一个需要String... 可变参数的方法,但它唯一允许从封闭函数接收的是一个普通的String。
我的方法是这样的:
public func deleteKeys(keysReceived:String..., completionHandler:@escaping () -> Void)
{
RedisClient.getClient(withIdentifier: RedisClientIdentifier()) {
c in
do {
let client = try c()
client.delete(keys: keysReceived){}
completionHandler()
}
//...
}
}
编译错误是
Cannot convert value of type '[String]' to expected argument type 'String'
此方法 (client.delete()) 来自 Perfect-Swift 的 Redis API,因此我无法更改签名,但我可以更改封闭函数 (deleteKeys)。我也不能直接调用该函数,因为它在回调闭包中
关于如何将接收到的可变参数传递给封闭的可变参数函数有什么建议吗?我可以将数组分解为单个字符串并单独删除,但这似乎不是很有效
【问题讨论】:
-
您是否称其为
obj.deleteKeys(keysReceived: "Hello", "World", "Something") { }?那应该可以。 -
@nayem 它不会编译,我什至还没有调用它
-
你能显示
delete(keys:)方法的签名吗? -
@nayem 这是
client.delete(keys: String..., callback: RedisClient.redisResponseCallback),没有其他重载 -
没有意义,因为您的呼叫没有
callback参数。你能分享那个 API 的链接吗?
标签: swift swift3 variadic perfect