我是编程新手,我正在尝试swiftSoup,但当我输入代码时,它给我这个错误:(包含控制流语句的闭包不能与结果生成器‘ViewBuilder’一起使用)如果我在错误的位置输入代码,或者我忘记了什么,我就不会!
这是代码
import SwiftUI
import SwiftSoup
struct ContentView: View {
var body: some View {
do {
let html = "<html><head><title>First parse</title></head>"
+ "<body><p>Parsed HTML into a doc.</p></body></html>"
let doc: Document = try SwiftSoup.parse(html)
let p: Element = try doc.select("title").first()!
rint(p)
} catch Exception.Error(let type, let message) {
print(message)
} catch {
print("error")
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}发布于 2021-11-09 01:04:56
不幸的是,您的代码有点混乱。
您会看到以下内容:
struct ContentView: View {
var body: some View {
// Some Stuff here
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}这是试图为您的应用程序创建用户界面的SwiftUI代码。不幸的是,它不像“普通”的Swift代码。有一些幕后的事情使得创建用户界面变得容易,但如果你是编程新手就很难理解了。
您将“普通老式代码”放在视图声明的中间,编译器在那里看到它时会感到非常困惑。
相反,让我们将您的代码放入一个函数中。然后你就可以调用这个函数了。
struct ContentView: View {
var body: some View {
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
func parseSomeHTML() {
do {
let html = """
<html>
<head>
<title>First parse</title>
</head>"
<body>
<p>Parsed HTML into a doc.</p>
</body>
</html>
"""
let doc: Document = try SwiftSoup.parse(html)
let p: Element = try doc.select("title").first()!
print(p)
} catch Exception.Error(let type, let message) {
print(message)
} catch {
print("error")
}
}现在,您的代码位于一个普通的Swift函数中。但你需要从某个地方调用它。让我们添加一个按钮来调用您的函数。将contentView更改为:
struct ContentView: View {
var body: some View {
Button("Push Me", action: { parseSomeHTML() })
}
}现在,当您运行应用程序时,您应该有一个按钮,按下该按钮应该会调用parseSomeHTML函数。
(请注意,我是如何使用三重双引号(“)在HTML中格式化多行字符串的。这不是必需的,您应该可以使用它,但它更漂亮)
https://stackoverflow.com/questions/69890865
复制相似问题