首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >预期参数类型'String'的Swift 4错误

预期参数类型'String'的Swift 4错误
EN

Stack Overflow用户
提问于 2018-12-14 00:28:58
回答 2查看 0关注 0票数 0

我收到此错误:

无法转换类型'的值(@escaping(String?,Error?) - > Void) - >()'到预期的参数类型'String'

我的代码是这样的:

代码语言:javascript
复制
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
}

我的直觉告诉我错误被抛出,因为我正在返回一个数组?但对所有这些仍然是新的,所以不太确定。

EN

回答 2

Stack Overflow用户

发布于 2018-12-14 09:11:31

您需要进行以下设置。getSamsData有一个completion所以你必须调用该方法来使用该completion块,你将获得所需的stringerror

代码语言:javascript
复制
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)
        }
    }
}

用法

代码语言:javascript
复制
self.findSamsContentId { (ids, error) in
    if let e = error {
        print(e.localizedDescription)
        return
    }
    print(ids!)
}
票数 0
EN

Stack Overflow用户

发布于 2018-12-14 09:53:35

我相信如果getSamsData是一个闭包,那么变量string(如在let string = getSamsData)中不是'String'类型,只是一个返回String的闭包(如前所述)...你不应该这样做let string = getSamsData()吗?这假设关闭没有收到任何东西,我没有看到你的问题中的实现,所以我拍了一下......顺便说一句,出于好奇,你是通过扩展String来做什么的?或者这只是你问题的一个例子?似乎您的代码是针对某些特定功能的,而这不是extensions能实现的...

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100006286

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档