Реализовать код ожидания проще или компактнее в SwiftUI - PullRequest
0 голосов
/ 30 января 2020

я написал код, который работает именно так, как я себе это представляю. Мне просто интересно, если все это проще и может быть сделано с меньшим количеством кода? В принципе я доволен, но мои чувства говорят мне, что это должно быть проще?!

struct ContentView: View {
    let timer = Timer.publish(every: 1, on: .main, in: .common).autoconnect()
    @State private var counter = 0
    @State private var wait = ""

    var body: some View {
        VStack {
            Text("\(self.counter)")
            Text("\(self.wait)")
                .onReceive(timer) { time in
                    if self.counter == 10 {
                        self.timer.upstream.connect().cancel()
                    } else if self.counter == 1 {
                        self.wait = "Waiting"
                    } else if self.counter == 2 {
                        self.wait = "Waiting."
                    } else if self.counter == 3 {
                        self.wait = "Waiting.."
                    } else if self.counter == 4 {
                        self.wait = "Waiting..."
                    } else if self.counter == 5 {
                        self.wait = "Waiting"
                    } else if self.counter == 6 {
                        self.wait = "Waiting."
                    } else if self.counter == 7 {
                        self.wait = "Waiting.."
                    } else if self.counter == 8 {
                        self.wait = "Waiting..."
                    } else if self.counter == 9 {
                        self.wait = ""
                    }
                    self.counter += 1
            }
        }
    }
}

Спасибо

Ответы [ 2 ]

1 голос
/ 31 января 2020

Используя диапазон, мы можем отобразить наше сообщение ожидания. Может оказаться полезным отменить таймер, если он больше 9. В диапазоне от 1 до 8 используйте повторяющиеся символы с оператором модуля для получения нужного сообщения.

if 1...8 ~= self.counter { 
  self.wait = "Waiting" + String(repeating: ".", count: (self.counter-1)%4)
} else if self.counter == 9  {
  self.wait = ""
} else if self.counter == 10 {
  self.timer.upstream.connect().cancel()
}

self.counter += 1
1 голос
/ 30 января 2020

Веселись! https://docs.swift.org/swift-book/LanguageGuide/ControlFlow.html

switch some value to consider {
case value 1:
    respond to value 1
case value 2,
     value 3:
    respond to value 2 or 3
default:
    otherwise, do something else
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...