SwiftUI 中带循环的动态按钮

Posted

技术标签:

【中文标题】SwiftUI 中带循环的动态按钮【英文标题】:Dynamic Button with loop in SwiftUI 【发布时间】:2019-08-01 10:56:21 【问题描述】:

我正在使用 SwiftUIXcode-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】:

要打印IntText("\(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 中带循环的动态按钮的主要内容,如果未能解决你的问题,请参考以下文章

如何使视图最大。 SwiftUI 中带填充的宽度

SwiftUI - 使用按钮切换“收藏”动态项目

SwiftUI 中按钮操作内的 ForEach 循环?

如何在 SwiftUI 中动态隐藏导航返回按钮

SwiftUI - ForEach 循环中的弹出框

如何从 SwiftUI 中的函数返回按钮?