我收到此错误:
无法转换类型'的值(@escaping(String?,Error?) - > Void) - >()'到预期的参数类型'String'
我的代码是这样的:
import Foundation
extension String {
class SamsData {
func findSamsContentId() -> [String]
{
if let regex = try? NSRegularExpression(pattern: "(\\d{19,})+", options: .caseInsensitive)
{
let string = self.getSamsData
return regex.matches(in: string, options: [], range: NSRange(location: 0, length: string.length)).map {
string.substring(with: $0.range).replacingOccurrences(of: "#", with: "").lowercased()
}
}
return []
}
...more code
}
我的直觉告诉我错误被抛出,因为我正在返回一个数组?但对所有这些仍然是新的,所以不太确定。
发布于 2018-12-14 09:11:31
您需要进行以下设置。getSamsData
有一个completion
所以你必须调用该方法来使用该completion
块,你将获得所需的string
或error
。
func getSamsData(_ completion: @escaping (String?, Error?) -> Void) {
//...
}
func findSamsContentId(_ completion: @escaping (([String]?, Error?) -> Void))
{
if let regex = try? NSRegularExpression(pattern: "(\\d{19,})+", options: .caseInsensitive)
{
self.getSamsData { (string, error) in
if let e = error {
print(e.localizedDescription)
completion(nil, e)
return
}
let text = string ?? ""
let results = regex.matches(in: text,
range: NSRange(text.startIndex..., in: text))
let subStrings = results.map { String(text[Range($0.range, in: text)!]).replacingOccurrences(of: "#", with: "").lowercased() }
completion(subStrings, nil)
}
}
}
用法
self.findSamsContentId { (ids, error) in
if let e = error {
print(e.localizedDescription)
return
}
print(ids!)
}
发布于 2018-12-14 09:53:35
我相信如果getSamsData
是一个闭包,那么变量string
(如在let string = getSamsData
)中不是'String'类型,只是一个返回String的闭包(如前所述)...你不应该这样做let string = getSamsData()
吗?这假设关闭没有收到任何东西,我没有看到你的问题中的实现,所以我拍了一下......顺便说一句,出于好奇,你是通过扩展String来做什么的?或者这只是你问题的一个例子?似乎您的代码是针对某些特定功能的,而这不是extensions
能实现的...
https://stackoverflow.com/questions/-100006286
复制相似问题