Einsteigen in XCode und Swift - Sammelthread

  • Autor
  • Nachricht

MassMover

Offline

Benutzeravatar


  • Wohnort: Köln
1  Di Jul 05, 2016 15:46
Ich habe vor einiger Zeit begonnen, mich wieder ein wenig in das Programmieren einzuarbeiten. Im Moment sehe ich mir recht viele Tutorials aus unterschiedlichen Quellen an und mache mir dabei Gedanken, wie verschiedene eigene Projekte, die ich als Idee im Kopf habe, organisiert werden könnten.

Im Gegensatz zur etwas sperrigen Objective-C Syntax finde ich swift recht gut erlernbar, aber natürlich tun sich hier und dort doch ein paar Verständnisfragen auf.

Die Programmierecke ist ja im Vergleich zu den anderen Brettern recht überschaubar, daher versuche ich hier einfach mal, einen XCode/Swift-Thread zu erstellen, in dem sich Amateure wie Profis gleichermaßen über Probleme austauschen können, ohne jedesmal einen neuen Thread zu eröffnen.

Und ich beginne direkt mit meiner ersten Frage:

Mir erschließt sich der konkrete Nutzen von Protokollen nicht, auf der anderen Seite bringt die Suche nach Antworten darauf viele Blogeinträge von erfahrenen Programmierern, die Protocols als eine tolle Errungenschaft preisen.

Mein bisheriges Verständnis sieht so aus:

Mit Protokollen erhalte ich eine Code-Sicherheit, da mir beim Erstellen einer Klasse etc. mögliche fehlende properties bereits zur Compiler-Zeit als Fehler gemeldet werden. Das ist bei großen Projekten hilfreich, wenn ich etwa Objekte in einer Spielewelt erstelle, und der Compiler mir direkt sagt: du musst noch definieren, ob das Objekt durchlässig oder solid ist. Bei kleinen, übersichtlichen Projekten mit wenigen Klassen hingegen bringen mir Protokolle keinen echten Zusatznutzen.

Trifft es das in etwa?

armin

Offline

Benutzeravatar



  • Wohnort: Berlin
2  Di Jul 05, 2016 21:22
Schöner Thread, ich will mitmachen. Bin auch Swift-Einsteiger.
Im Übrigen bin ich der Meinung, dass ein bereits stattgefunden habender Neustart die Voraussetzung dafür sein sollte, einen Thread im Hard- oder Software-Brett zu eröffnen.

MassMover

Offline

Benutzeravatar


  • Wohnort: Köln
3  Di Jul 05, 2016 21:33
Hast du denn vorher in Objective-C programmiert? Du hast doch hier mal das MemoTouch vorgestellt. War die Programmierung von dir, oder warst du eher Ideengeber?

armin

Offline

Benutzeravatar



  • Wohnort: Berlin
4  Di Jul 05, 2016 23:44
Hehe, das ist lange her. Ich hab das Design und alles andere gemacht, aber nicht programmiert. Mittlerweile habe ich ein bisschen programmiert und verstehe Objective-C-Code ganz gut, Swift-Code auch, aber schreiben kann ich noch nicht so recht. Naja, das wird.
Im Übrigen bin ich der Meinung, dass ein bereits stattgefunden habender Neustart die Voraussetzung dafür sein sollte, einen Thread im Hard- oder Software-Brett zu eröffnen.

MassMover

Offline

Benutzeravatar


  • Wohnort: Köln
5  Mo Sep 05, 2016 14:38
Mal wieder ein Beitrag von mir.

Jooh, wat sollisch saren: Das eigentliche Umsetzen der Logik finde ich in Swift recht einfach. Ich bin aber noch weit davon entfernt, eine lauffähige App, wie ich mir sie vorstelle, von Grund auf zu schreiben.

Ich arbeite mich schrittweise durch die Tutorials bei raywenderlich.com. Das Problem ist: Ich fühle mich dort zu sehr an die Hand genommen. Die meisten OSX-Tutorials beschäftigen sich mit Views im Interface Builder. Andere Dinge, als die, um die sich das jeweilige Tutorial dreht, werden dabei kurz gestreift, letztlich aber einfach als fertiger Code zum Copypasten bereitgestellt.

Im Moment beschäftigt mich folgendes Problem: Ich möchte einen Retro-Joystick (Competition Pro USB) abfragen. Lustigerweise wurde genau nach dem hier schon mal gefragt, allerdings über ein Interface und mittels Perl-Skript. Letzteres sagt mir aber z.B. gar nichts. Ich könnte mich nun in Perl einlesen, mir fehlt aber eine Art Guide, der mir sagt: Wenn du dies und das machen willst, musst du das und das lesen.

In Swift 2 gibt es tatsächlich das GameController Framework. Das funktioniert aber nur, wenn der Hardwarecontroller einer von 3 Spezifikationen entspricht. Dann geht eine Abfrage einfach:

if gameController.buttonA.pressed == true

Leider entspricht der alte Stick natürlich keinem dieser Standards. Also muss ich ihn wohl über das IOKit Framework ansprechen. Bei Stackoverflow habe ich zumindest diese Funktion gefunden, mit der ich alle angeschlossenen USB Geräte anzeigen kann.

Ich habe eine Vorstellung, wie es weitergeht: weiter nach Geräteklasse (HID) fragen. Dann bleibt der Joystick, aber auch Tastatur und Maus übrig. Muss ich eine Liste aller möglichen Joysticks anlegen?

Und nervig ist, dass ich mich dafür dann doch wieder mit der Obj-C-Syntax auseinandersetzen muss. Die Dokumentation in Apples Programming Guide im Kapitel "Accessing Hardware" und "USB" bezieht sich auf OSX.6 oder früher! Der SampleCode, den man auf der Apple Seite dazu findet, kompiliert in XCode 7 gar nicht erst.
----------------------

So! Kurzform: Wenn jemand ein übersichtliches Tutorial dazu kennt, wie ich eine beliebige USB-Hardware, die vom System als "generic HID" oder "generic Game Controller" erkannt wird, erkennen kann und herausbekommen kann, und wie ich dann von dort Benutzereingaben abfragen kann, immer her damit.

MassMover

Offline

Benutzeravatar


  • Wohnort: Köln
6  Fr Jun 23, 2017 18:26
Und mal wieder ich.

Vielleicht ist die Frage gar nicht unbedingt Swift-spezifisch, sondern bezieht sich auf Objektorientiertes Programmieren allgemein, daher dürfen auch andere als Armin antworten :wink:

Ich habe eine struct, die zwei Werte speichert, beide Werte drücken dabei dasselbe auf unterschiedliche Weise aus. Man kann ein Objekt dieser Art also auf zwei Arten initialisieren, der initializer ruft dann jeweils eine Funktion auf, in welcher der Wert des jeweiligen anderen Property berechnet wird. Für diese Berechnung sind jedoch noch weitere Werte notwendig, die ich zunächst als globale Variablen definiert habe. Nennen wir einen davon 'grid'.

Das klappt im Playground auch alles soweit ganz gut.

Aber:

Instanzen dieser struct, nennen wir sie myStruct, sind nicht dafür bestimmt, einzeln zu existieren, sondern ausschließlich als Elemente eines arrays, welches wiederum eine Eigenschaft einer anderen struct, nennen wis sie outerStruct, ist. Diese outerStruct soll letztlich auch die properties besitzen, welche ich zur Zeit außerhalb als globale Variablen definiert habe. Das heißt, es können später auch mehrere Instanzen von outerStruct existieren, deren 'grid' unterschiedliche Werte hat, so dass die Berechnung des jeweils anderen property einer myStruct Instanz unterschiedliche Ergebnisse bringen kann.

Als Beispiel, damit man sich einen Anwendungszweck vorstellen kann:

Dem Array einer outerStruct Instanz füge ich das Ganzzahl-Element 11 hinzu, der 'grid' Wert dieser Instanz steht auf 8. Die errechnete andere Variable bringt mir das Tupel (1,3).
Füge ich die selbe Zahl (11) dem Array einer Instanz hinzu, deren Grid auf 2 steht, erhalte ich (5,1)

Ich habe bereits probiert, die myStruct als nested type in die outerStruct einzubetten, dann erhalte ich jedoch die Meldung, dass ich auf instance properties nicht zugreifen kann. Mache ich 'grid' hingegen static, kann ich nicht pro Instanz einen anderen Wert vergeben.

Ich glaube nicht, dass mein Ziel besonders exotisch ist, aber im Moment fallen mir nur Ansätze ein, die gefühlt meilenweite Umwege darstellen.
7  Di Jul 04, 2017 16:50
Hi, bin gerade über Google auf diesen Thread gestoßen. Ich versuche gerade dasselbe wie MassMover mit dem USB-Joystick (auch der Competition Pro) und Swift. Hast du das mittlerweile hinbekommen und wenn ja, könntest du mir verraten wie oder mir den Code zur Verfügung stellen? Wäre echt super!
Bin Swift-Anfänger und komme an derselben Stelle nicht weiter, die du oben beschrieben hast... Die Apple Dokumentation dazu ist ja echt zum Heulen :cry:

Viele Grüße
jakaZ

MassMover

Offline

Benutzeravatar


  • Wohnort: Köln
8  Mi Jul 05, 2017 12:16
Hi jakaZ,

willkommen auf dem Sofa!

Ich habe das damals erst mal nicht weiter verfolgt, kann dir also leider nicht weiter helfen. Falls ich das Projekt irgendwann wieder aufnehme, poste ich hier, wenn ich erfolgreich war, falls du zwischenzeitlich schneller warst, postest du, abgemacht?

Zurück zu Programmierecke

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder

cron