Frage zur Programmierung mit Swift

03. Juni 2019 20:39 Uhr - Franz

Arbeitet jemand mit Swift?

Gibt es hier ein eigenes Forum für Programmieren?

Ich habe folgendes Array erzeugt:

var zahlen: [UInt8] = []

Ich möchte dieses Array mit verschiedenen Integer-Zahlen füllen. Wie kann ich abfragen ob ein Wert bereits enthalten ist um Doppeleintragungen zu vermeiden?

Schau mal hier: https://forums.swift.org/c/swift-users

Lustigerwiese gleich die erste Frage in dem Forum! :-)

Kurze Antwort: 

 

if zahlen.contains(4) {print("bin schon da!")}

else {zahlen.append(4)}

Viel Spaß mit Swift, und: Playgrounds ist Dein Freund!

@mabi99

Danke für den link. Die Lösung habe ich im Forum bei der ersten Frage nicht gefunden. Dein Beispiel hat mir sehr geholfen und konnte den Code wesentlich besser formulieren. ".append" hatte ich schon aus dem dropdown-menu. Ich habe zwar dieses ".contains" nun auch darin gefunden, ist aber anfangs ein wenig schwierig es zuzuordnen. Gibt es dieses dropdown irgendwie als Liste zu Ausdrucken? Man könnte sich dann einmal einen Überblick verschaffen.

Nun hätte ich die Zahlen im Array auch gerne sortiert. Im Dropdown-Menü steht "sort()". Im Playgrounds werden die Zahlen zwar sortiert aber mit dem Print-Befehl ist es leer. 
var zahlen: [UInt8] = [5, 7, 2, 1, 4]
zahlen.sort()                                               // [1, 2, 4, 5, 7]
print(zahlen.sort())                                  // ()

Die sortierten Zahlen einer Variablen zuzuordnen ergibt eine Fehlermeldung, daß der Wert "()" gegeben ist. Habe ich die falsche Sort-Routine genommen?

Playgrounds verwende ich. Gibt es auch ein deutsches Forum?

Etwas verwirrend ist die unterschiedliche Schreibweise. Bei Pascal war das konsequenter?

Du solltest bei developer.apple.com vorbei schauen, dort gibts alles, was das Herz begehrt– nur vielleicht nicht auf deutsch. Ich bin mir sicher, es gibt auch ein deutsches Forum irgendwo im Netz (Goole ist Dein Freund!), aber noch viel, viel mehr, wenn Du Dich durch's Englische durchkämpfst. 

Zu Deinem Problem noch einmal einen Link:

https://developer.apple.com/documentation/swift/array

(das ist die Swift-Dokumentation, da stehen alle Funktionen aufgeführt, die Array zu bieten hat)

Und die Lösung Deines Problems in aller Kürze:

 

print(zahlen.sorted())

Das Problem ist, dass .sort() nur den Inhalt des Arrays sortiert aber nicht zurückgibt (kein return Wert). Das erkennst du in der Definition (also in dem dropdown-Eintrag, den Du gesehen hast) daran, dass die Funktion Void Array.sort() heisst. Das Void heisst, sie gibt nix zurück, was print() drucken könnte. Die Funktion [Int] Array.sorted() gibt entsprechend ein sortiertes Array zurück. 

 

Du könntest also auch einfach folgendes machen:

 

zahlen.sort()

print(zahlen)

Viele Grüße,

mabi

 

 

 

 

@mabi99

Danke für den Lösungsansatz. Funktioniert tadellos.

Englisch ist ja nicht unbedingt das Problem, nur in deutsch ginge es wesentlich flotter. Als Einstieg habe ich den link von Apple "https://swift.org/documentation/". Ich werde mich nun auch bei deinem link durchackern denn der sieht mir auch sehr lehrreich aus. Auch auf YouTube habe ich mir auch einige Videos angesehen.

Eine Frage hätte ich noch:
Funktionieren mit "Playgrounds" am Mac/Xcode sowohl IOS- als auch Mac-Befehle? Ich denke, man muß vorher das System auswählen? Gibt wahrscheinlich auch unterschiedliche Befehlsstrukturen die nur auf bestimmten Systemen funktionieren?

Viele Grüße
Franz
 

Da gibt es keine Unterschiede. Die kommen erst ins Spiel, wenn du andere libraries verwendest, also z.B. ein echtes Programm mit Benutzeroberfläche schreiben möchtest. Und selbst da kann sich der Untersxhied in Grenzen halten, je nachdem wie du die Oberfläche gestaltest.

 

ich habe aber das Gefühl, dass Du insgesamt nicht sehr viel Erfahrung mit Programmierung im Allgemeinen hast und würde Dir daher auf jeden Fall die Lektüre der (zum Großteil exzellenten) Tutorials und Einführungen von Apple zum Thema empfehlen.

Viele Grüße und viel Spaß,

mabi 

Ich hätte den ersten Teil einmal fertig. Nun möchte ich ein kleines Programm mit Xcode laufen lassen. Dazu gibt es die Möglichkeit mit Simulatoren. Ich habe ein iPad der 5ten Generation und daher dies so eingestellt. Der Debugger meldet mir aber

"error: Cycle inside Sechs aus Fuenfundvierzig; building could produce unreliable results.

Cycle details:

→ Target 'Sechs aus Fuenfundvierzig': CodeSign /Users/papa/Library/Developer/Xcode/DerivedData/Sechs_aus_Fuenfundvierzig-gjfdfkvnmvkxcgasdknbxfddvycm/Build/Products/Debug-iphonesimulator/Sechs aus Fuenfundvierzig.app

○ Target 'Sechs aus Fuenfundvierzig' has copy command from '/Users/papa/Library/Developer/Xcode/DerivedData/Sechs_aus_Fuenfundvierzig-gjfdfkvnmvkxcgasdknbxfddvycm/Build/Products/Debug-iphonesimulator/Sechs aus Fuenfundvierzig.app' to '/Users/papa/Library/Developer/Xcode/DerivedData/Sechs_aus_Fuenfundvierzig-gjfdfkvnmvkxcgasdknbxfddvycm/Build/Products/Debug-iphonesimulator/Sechs aus Fuenfundvierzig.app/Sechs aus Fuenfundvierzig.app'"

Wie kommt es zum iPhone-Simulator? Welche Einstellungen sind relevant um ohne "Interface" arbeiten zu können?

Hallo Franz,

ich kann Dir da gerade nicht weiterhelfen, ich hab auch viel zu wenig Informationen, was Du genau machen willst und wie und was Du da schon gemacht hast in Xcode. Aber schau Dir doch einfach ein paar Tutorials an (Google "iOS, Swift, Tutorial Einsteiger" oder so... da gibts z.B. dieses

https://blogs.itemis.com/de/swift-tutorial-teil-1-ich-möchte-swift-lern…

Mach einfach mal deren Tutorial durch (da wird eine kleine iOS-App programmiert) und wenn die bei dir läuft, dann kannst Du ja den Programmcode durch Deinen eigenen erweitern oder ersetzen!

Viel Erfolg,

mabi

 

Den ganzen Teil Typen, etc. hatte ich schnell durch. War mir von Pascal, auch wenn es schon Jahre zurück liegt, noch geläufig. Einige Libraries fand ich nicht gleich die ich beim Üben brauchte. Jetzt geht es darum für kleine Codes, die mit playground tadellos funktionieren, eine App zu erstellen. Ich habe mir das Buch von Thomas Sillmann "Das Swift Handbuch" ausgeliehen. Ist sehr gut beschrieben aber mit Xcode hänge ich ein wenig. Meist genügt ja ein Anstoß und alles läuft dann wieder wie geschmiert. Oft ist es nur eine Kleinigkeit über die man darüber sieht.

Wie kann man den code in Xcode testen ohne mit Interface eine App entwickelt zu haben?
Was bedeutet der Fehler
"Cycle inside MyProgramm: building could produce unreliable result"?
 

 

Da wird doch genau das gemacht?! 

Du hattest aber irgendwas von einem iPhone Simulator geschrieben und Deine Fehlermeldung oben deutet ja auch darauf hin ("Debug-iphonesimulator"). Das willst und brauchst Du aber nicht, Du machst einfach ein Mac Project, genau wie in dem Link beschrieben und führst dein Programm aus, so dass das Ergebnis im Output-Bereich von Xcode ausgegeben wird. Mach doch einfach, was ich gesagt hab: mach das Projekt aus dem Tutorium nach und ersetze dann den Code mit Deinem eigenen...

"Cycle inside MyProgramm..." kann verschiedene Ursachen haben, ich kenne das nicht. Wenn ich mal für Dich google, wird empfohlen, nochmal aufzuräumen und neu zu builden (Command shift k, und dann command b). Aber sonst werd das Projekt einfach weg (kopier deinen code) und mach wie ich oben sagte...

Aber Du hast oben doch klar gesagt, Du willst eine App ohne Interface zum Testen Deines Codes?

Wie auch immer, schön, dass Du ein gutes Tutorium gefunden hast, das Dir weiterhilft! Viel Spaß beim Programmieren!