Swift Regex 错误:匹配模式时无法将 'Regex<(Substring, Substring, Substring)>' 转换为 'Regex<AnyRegexOutput>'

问题描述 投票:0回答:1

我正在开发一个利用正则表达式进行模式匹配的 Swift 类,但在尝试初始化自定义类中的正则表达式类型时遇到错误。

班级代码:

import Foundation

class Challenge {
    let title: String
    let description: String
    let regex: Regex<AnyRegexOutput>
    var isComplete: Bool
    
    init(title: String, description: String, regex: Regex<AnyRegexOutput>, isComplete: Bool = false) {
        self.title = title
        self.description = description
        self.regex = regex
        self.isComplete = isComplete
    }
}

有错误的代码

我正在尝试创建一系列挑战实例,如下所示:

var dailyChallenges =  [
    Challenge(title: "Update Title",
              description: "set a new website title",
              regex:  /<title>(?!webview<\/title>)(.*?)<\/title>/),
    
    
    Challenge(title: "Add Image",
              description: "add an image with a source URL",
              regex:  /<img(\s.*\s|\s)(src="http.+?")/),
]

错误信息

但是,我收到以下错误:

Cannot convert value of type 'Regex<(Substring, Substring)>' to expected argument type 'Regex<AnyRegexOutput>'

Arguments to generic parameter 'Output' ('(Substring, Substring)' and 'AnyRegexOutput') are expected to be equal

和:

Cannot convert value of type 'Regex<(Substring, Substring, Substring)>' to expected argument type 'Regex<AnyRegexOutput>'

Arguments to generic parameter 'Output' ('(Substring, Substring, Substring)' and 'AnyRegexOutput') are expected to be equal

问题

如何修改我的类以使用可以匹配任意数量子字符串的正则表达式模式,以便避免此转换问题?

swift regex xcode substring regex-group
1个回答
0
投票

要解决您遇到的错误,您需要在将正则表达式模式传递给 Challenge 类时使用

.init()
初始值设定项。 Regex 类型需要显式初始化,以确保它与预期的 Regex 类型匹配。

以下是更新代码的方法:

var dailyChallenges =  [
        Challenge(title: "Update Title",
                  description: "set a new website title",
                  regex:  .init(/<title>(?!webview<\/title>)(.*?)<\/title>/)),
        
        
        Challenge(title: "Add Image",
                  description: "add an image with a source URL",
                  regex:  .init(/<img(\s.*\s|\s)(src="http.+?")/)),
    ]

说明

使用

.init()
显式构造 Regex 实例,确保其类型与 Regex 一致。此更改应该消除您看到的错误,并允许您的正则表达式模式在挑战类中正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.