我正在开发一个利用正则表达式进行模式匹配的 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
如何修改我的类以使用可以匹配任意数量子字符串的正则表达式模式,以便避免此转换问题?
要解决您遇到的错误,您需要在将正则表达式模式传递给 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 一致。此更改应该消除您看到的错误,并允许您的正则表达式模式在挑战类中正常工作。