So führen Sie Aufgaben parallel zu Swift in Swift Package aus

Aus irgendeinem Grund wollte ich Swift unter Ubuntu installieren und die parallele Verarbeitung versuchen, aber es hat nicht funktioniert, deshalb zeige ich Ihnen das Problem und die Lösung.

Umgebung

Die Umgebung, die ich ausgeführt habe, ist wie folgt.

Was du machen willst

Nach der Untersuchung scheint es üblich zu sein, "Dispatchqueue" zu verwenden. Es scheint, dass es auch "Process" und "Thread" gibt, aber "Dispatchqueue" scheint die Verwendung zu vereinfachen, deshalb habe ich mich entschlossen, "Dispatchqueue" gehorsam zu verwenden.

Problem

Kopieren Sie zunächst den Code von Site, die nach der Suche veröffentlicht wurde wie folgt und gehen Sie wie folgt vor War dort.

Ich habe "swift package init --type executeable" ausgeführt, um verschiedene Dateien zu generieren, und habe main.swift wie folgt erstellt.

import Foundation

var value: Int = 2

DispatchQueue.main.async {
    for i in 0...3 {
        value = i
        print("\(value) ✴️")
    }
}

for i in 4...6 {
    value = i
    print("\(value) ✡️")
}

DispatchQueue.main.async {
    value = 9
    print(value)
}

Das Ausführungsergebnis ist jedoch

4 ✡️
5 ✡️
6 ✡️
0 ✴️
1 ✴️
2 ✴️
3 ✴️
9

Ich wollte sein

4 ✡️
5 ✡️
6 ✡️

Es ist geworden. Mit anderen Worten, die Verarbeitung des Teils, das ** Dispatchqueue überlassen bleibt, wird überhaupt nicht ausgeführt. ** ** **

Lösung

Ich hatte eine Idee zu dieser Sache. Es wurde ** die Datei alleine ausgeführt **. Viele Websites sind für die Verwendung in iPhone-Apps vorgesehen, die auf einem Mac entwickelt wurden. Außerdem erinnerte ich mich, dass ich zuvor ein ähnliches Problem hatte, als ich Swift als einzelne Datei ausführte. Unten sind die Fragen aufgeführt, die ich damals gestellt habe. [Swift] Timer kann nicht wiederholt ausgeführt werden (reguläre Ausführung) Dies ist ein Problem, da RunLoop, das automatisch in der App ausgeführt wird, nicht ausgeführt wird, wenn die Swift-Datei alleine ausgeführt wird, und es wird durch Hinzufügen von "RunLoop.current.run ()" am Ende des Programms behoben. Hat. Wie habe ich diesem Programm auch "RunLoop.current.run ()" hinzugefügt?

import Foundation

var value: Int = 2

DispatchQueue.main.async {
    for i in 0...3 {
        value = i
        print("\(value) ✴️")
    }
}

for i in 4...6 {
    value = i
    print("\(value) ✡️")
}

DispatchQueue.main.async {
    value = 9
    print(value)
}

RunLoop.current.run()

Dann war die Ausgabe wie erwartet.

Zusammenfassung

Schließlich

Wenn Sie Fehler oder Verbesserungen haben, hinterlassen Sie bitte einen Kommentar oder eine Bearbeitungsanfrage. Vielen Dank.

Recommended Posts

So führen Sie Aufgaben parallel zu Swift in Swift Package aus
[swift5] So legen Sie die Farbe hexadezimal fest
So überschreiben Sie Firebase-Daten mit Swift
So implementieren Sie UICollectionView mit Code nur in Swift
[Java] Wie man Aufgaben regelmäßig ausführt
[swift5] So führen Sie die Verarbeitung aus, wenn Sie auf die TabBar tippen
So ändern Sie die Hintergrundfarbe der Navigationsleiste usw. in der Swift-Benutzeroberfläche
So finden Sie May'n in XPath
So blenden Sie die Bildlaufleiste in WebView aus
So führen Sie JUnit in Eclipse aus
Wie man Ant in Gradle ausführt
Wie man JAVA in 7 Tagen lernt
So erhalten Sie Parameter in Spark
So installieren Sie Bootstrap in Ruby
Verwendung von InjectorHolder in OpenAM
So installieren Sie jQuery in Rails 6
Wie verwende ich Klassen in Java?
So benennen Sie Variablen in Java
So setzen Sie Lombok in Eclipse
[Swift] So ersetzen Sie mehrere Zeichenfolgen
Wie man Ruby's irb ausführt (interaktiver Ruby)
So verketten Sie Zeichenfolgen mit Java
So installieren Sie Swiper in Rails
[Rails] Ausführen von "Rails db: create" usw. in der Produktionsumgebung EC2
So implementieren Sie Suchfunktionen in Rails
So implementieren Sie die Datumsberechnung in Java
So implementieren Sie den Kalman-Filter mit Java
Mehrsprachige Unterstützung für Java Verwendung des Gebietsschemas
So ändern Sie den App-Namen in Rails
Verwendung des benannten Volumes in docker-compose.yml
So filtern Sie den JUnit-Test in Gradle
So fügen Sie ein Video in Rails ein
[GCD] Grundlagen der parallelen Programmierung in Swift
So standardisieren Sie die Kopfzeile in Thymeleaf
Wie kann ich Spring Tool in Eclipse 4.6.3 einbinden?
So fügen Sie eine JAR-Datei in ScalaIDE hinzu
So führen Sie eine Basiskonvertierung in Java durch
Ausführen mit normalen Befehlen für die Entwicklungssprache in der Docker-Entwicklungsumgebung
[Architekturdesign] Wie führe ich SQL in einer Java-Anwendung aus? 2WaySql vs ORM
Wie man Parameter in der link_to-Methode hat
Verwendung von Docker in VSCode DevContainer
Verwendung von MySQL im Rails-Tutorial
So beheben Sie das Systemdatum in JUnit
So erzwingen Sie Codierungskonventionen in Java
Einbetten von Janus Graph in Java
[Rails] So konfigurieren Sie das Routing in Ressourcen