如何创建for循环并延迟以每X秒显示一条消息?

哈萨纳尔人

我正在尝试制作一个函数,该函数接受数组内容并显示每个元素(文本),我正在使用swiftUI @State变量来存储消息,还尝试了环境对象变量来存储消息并在其中显示一个Text(“”)。当前该函数仅显示数组中的最后一条消息,仅将结束循环元素存储在数组中。

请让我知道如何一次显示每个消息

谢谢

@State var messages = ["Welcome","FirstName","LastName"]
@State var message = ""

func DisplayMessageAnimation(messages: [String]) {


    for i in 0..<messages.count {

        // your code here
        self.message = messages[i]
        print(" message", self.message)

        sleep(UInt32(5.0))
    }  
}

您应该使用重复计时器,如果视图消失,您可以取消该计时器。

例如通过字符串旋转:

import Combine

struct ContentView: View {
    @State var message = "Hello, world!"
    @State var timer: AnyCancellable?

    var body: some View {
        VStack {
            Text(message)
            Button(action: {
                self.startRepeatingRotation(with: ["foo", "bar", "baz"])
            }) {
                Text("Start rotating messages")
            }
        }.onDisappear {
            self.timer?.cancel()
        }
    }

    private func startRepeatingRotation(with messages: [String]) {
        guard !messages.isEmpty else { return }

        var index = 0
        self.message = messages[0]
        self.timer = Timer.publish(every: 5, on: .main, in: .common).autoconnect().sink { output in
            index = (index + 1) % messages.count
            self.message = messages[index]
        }
    }
}

或者,如果您希望它在序列结束(即非重复序列)结束时停止,则可能是:

private func startRotation(with messages: [String]) {
    guard !messages.isEmpty else { return }

    var index = 0
    self.message = messages[0]
    self.timer = Timer.publish(every: 5, on: .main, in: .common).autoconnect().sink { output in
        index += 1
        guard index < messages.count else {
            self.timer?.cancel()
            return
        }
        self.message = messages[index]
    }
}

FWIW,

  • 从不睡觉”。您永远都不想阻塞主线程。

  • 您都不应该使用asyncAfter如果这样做,那么即使您取消了所涉及的视图,那些计划的调度也将在那里等待运行。而且,如果将来的时间间隔太远了,您将开始看到这些单独asyncAfter呼叫的“推销” ,而不是像您希望的那样每五秒钟运行一次。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在foreach循环中显示一条消息?

来自分类Dev

Python3 + Discord-每X秒发送一条消息

来自分类Dev

使用JAVA在arraylist的for循环中每x秒执行一条指令

来自分类Dev

每 x 秒随机发送一条消息,但会在屏幕上停留几秒钟

来自分类Dev

仅针对foreach循环显示一条消息

来自分类Dev

如何使用AngularJS每秒显示一条消息?

来自分类Dev

ngMessages:如何隐藏或显示另一条消息

来自分类Dev

如何仅显示循环的最后一条输出线

来自分类Dev

检查`ls`中的所有文件是否存在循环,并根据条件显示一条消息

来自分类Dev

如何消费一条消息?

来自分类Dev

如何在线程中显示至少包含一条新消息的每条消息?

来自分类Dev

如何创建 swiftmailer 消息并将其附加到另一条消息

来自分类Dev

仅显示一条通用消息,而不是每个输入一条消息

来自分类Dev

显示消息数组中的最后一条消息

来自分类Dev

如果连续正确回答x次,则显示一条消息

来自分类Dev

如何一次在asp.net的验证摘要中仅显示一条消息

来自分类Dev

如何测试FacesContext与JUnit一起显示一条消息

来自分类Dev

在Ansible循环中打印一条消息

来自分类Dev

如何比较两个inputText包含onBlur并显示一条消息

来自分类Dev

如何显示一条消息几秒钟,然后在javascript中消失

来自分类Dev

如何检查用户输入是否不是数字,然后在C#中显示一条消息?

来自分类Dev

启动san ssh连接时,如何在显示的“最后登录”之后添加一条消息?

来自分类Dev

如何显示一条消息几秒钟,然后在javascript中消失

来自分类Dev

如何在exim4邮件队列中显示最后一条消息?

来自分类Dev

WooCommerce:向用户显示一条消息

来自分类Dev

JavaScript重定向然后显示一条消息

来自分类Dev

如果用户未登录,则显示一条消息

来自分类Dev

在骨干js的控制台中显示一条消息

来自分类Dev

在scala表单上仅显示一条错误消息

Related 相关文章

  1. 1

    如何在foreach循环中显示一条消息?

  2. 2

    Python3 + Discord-每X秒发送一条消息

  3. 3

    使用JAVA在arraylist的for循环中每x秒执行一条指令

  4. 4

    每 x 秒随机发送一条消息,但会在屏幕上停留几秒钟

  5. 5

    仅针对foreach循环显示一条消息

  6. 6

    如何使用AngularJS每秒显示一条消息?

  7. 7

    ngMessages:如何隐藏或显示另一条消息

  8. 8

    如何仅显示循环的最后一条输出线

  9. 9

    检查`ls`中的所有文件是否存在循环,并根据条件显示一条消息

  10. 10

    如何消费一条消息?

  11. 11

    如何在线程中显示至少包含一条新消息的每条消息?

  12. 12

    如何创建 swiftmailer 消息并将其附加到另一条消息

  13. 13

    仅显示一条通用消息,而不是每个输入一条消息

  14. 14

    显示消息数组中的最后一条消息

  15. 15

    如果连续正确回答x次,则显示一条消息

  16. 16

    如何一次在asp.net的验证摘要中仅显示一条消息

  17. 17

    如何测试FacesContext与JUnit一起显示一条消息

  18. 18

    在Ansible循环中打印一条消息

  19. 19

    如何比较两个inputText包含onBlur并显示一条消息

  20. 20

    如何显示一条消息几秒钟,然后在javascript中消失

  21. 21

    如何检查用户输入是否不是数字,然后在C#中显示一条消息?

  22. 22

    启动san ssh连接时,如何在显示的“最后登录”之后添加一条消息?

  23. 23

    如何显示一条消息几秒钟,然后在javascript中消失

  24. 24

    如何在exim4邮件队列中显示最后一条消息?

  25. 25

    WooCommerce:向用户显示一条消息

  26. 26

    JavaScript重定向然后显示一条消息

  27. 27

    如果用户未登录,则显示一条消息

  28. 28

    在骨干js的控制台中显示一条消息

  29. 29

    在scala表单上仅显示一条错误消息

热门标签

归档