SwiftUI 中带循环的动态按钮
Posted
技术标签:
【中文标题】SwiftUI 中带循环的动态按钮【英文标题】:Dynamic Button with loop in SwiftUI 【发布时间】:2019-08-01 10:56:21 【问题描述】:我正在使用 SwiftUI
和 Xcode-beta 4
。
我想用ForEach
创建动态按钮。我正在使用这些代码行:
struct Result
var id = UUID()
var score: Int
struct ContentView : View
let results = [Result(score: 8), Result(score: 5), Result(score: 10)]
var body: some View
VStack
ForEach(results.identified(by: \.id)) result in
Button(action:
print(result.score)
)
Text(result.score)
但是Xcode
不能编译这个。
当我在按钮样式中将Text(result.score)
更改为Text("test")
时,现在Xcode 可以编译它了
【问题讨论】:
可能是类型转换的问题,首先将分数转换为字符串,然后在文本中使用。像 Text("(result.score)") 【参考方案1】:要打印Int
:Text("\(result.score)")
还请记住,ForEach
语法发生了一些变化(Beta 5)。
现在应该是:results.identified(by: \.id)
let results = [Result(score: 8), Result(score: 5), Result(score: 10)]
var body: some View
VStack
ForEach(results.identified(by: \.id)) result in
Button(action:
print(result.score)
)
Text("\(result.score)")
【讨论】:
谢谢!是的,它是正确的。但是如果我将分数更改为String
,我仍然必须使用double quotation
来打印它
不确定你的意思。我刚测试过。如果我将分数更改为String
,则效果很好:Text(result.score)
。【参考方案2】:
尝试使用 Text("\(result.score)")
【讨论】:
这没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方留下评论。 - From Review 原帖中没有任何问题,只是抱怨他使用 Text(result.score) 时无法编译,答案是 Text() 期望看到一个字符串和因此他应该使用 Text("\(result.score)")。Try
部分听起来你不确定,而且答案本身有点短,这就是它进入 LQP 审查队列的原因,这就是我将其标记为 does not provide an answer
的原因.如果是Printing with the Text function requires a string, that can be created with the formatting construct ``Text("\(result.score)")``
之类的东西,那么没有人会发现这个答案有合理的问题。但就目前而言,这有点可疑。【参考方案3】:
由于 result.score 是 Int,您必须将其转换为 String 才能在 Text() 中显示。将您的文本按钮代码更改为此:
Text("\(result.score)")
【讨论】:
你错过了行尾的)
以上是关于SwiftUI 中带循环的动态按钮的主要内容,如果未能解决你的问题,请参考以下文章