在 Swift 5.5 / SwiftUI 中尝试使用更改按钮标签退出循环

Trying to use change of button label to exit loop in Swift 5.5 / SwiftUI

这是我一直在尝试使按钮像切换按钮一样运行并在切换到“运行”时循环 运行 并在按钮退出循环时的按钮代码returns 到“开始”...

@State private var buttonLabel = "开始"

  Button(buttonLabel) {
    if buttonLabel == "Running" {
      buttonLabel = "Start"
    } else {
      buttonLabel = "Running"
    }
    while buttonLabel == "Running" {
      print("running")
    }
  }

我什至尝试在 while 语句的代码部分的 print 语句下添加...

   if buttonLabel != "Running {
    break
   }

当这个 运行s 没有 while 语句时...按钮将开始显示“开始”,按下时变为“运行”,再次按下时 returns 到“开始”。但是,当添加 while 循环代码时,程序为 运行...当您点击“开始”时,文本变暗并且不显示“运行”并且无法按按钮将其转回“开始”或退出循环。

那是因为您让 SwfiftUI 主线程忙于 while。如果您想在 while.

中做一些事情,您可以 运行 平行 task
struct ButtonProblem: View {
    @State var buttonLabel = "Start"
    var body: some View {
        Button(buttonLabel) {
            if buttonLabel == "Running" {
                buttonLabel = "Start"
            } else {
                buttonLabel = "Running"
            }
            
            Task.detached {
                while buttonLabel == "Running" {
                    print("running")
                    
                }
            }
        }  
    }
}