Bin blutiger Anfänger: Path Control auslesen

Loki M

unregistriert
Mitglied seit
07.02.2005
Beiträge
3.513
Sieht aus als hättest du UIKit nicht importiert, daher der erste Fehler vermutlich. Abhilfe: am Beginn der Datei:
import UIKit

brain ist eine Instanz einer Klasse aus dem Projekt von dem das kopiert ist, das kennt dein Programm natürlich nicht. Dies auch nur zur Veranschaulichung wie man auf Properties zugreift und wie ggf. optional chaining funktioniert.

In deinem Fall müsstest du auch auf

Quellpfad.url.absoluteString zugreifen, um den Pfad als String zu bekommen.

Sei mir nicht böse, aber ich glaube dir fehlen noch einige Grundlagen. Im verlinkten Kurs gibt Paul Hegarty auch einige Hinweise (wenn auch kein vollständiges Tutorial) wie die integrierte Dokumentation funktioniert.

Grundsätzlich muss man um die Doku zu verstehen zumindest Grundlagen der objektorientierten Programmierung verstehen.

Was Properties/Member sind, zb; wie man auf diese zugreift, Zugriffskontrolle (unter Swift etwas anders als zB Java oder C++), der Unterschied zwischen Klassen und Structs unter Swift sollte zumindest bekannt sein.

Ein letztes Mal mein Tip: zieh dir Hegart rein. Bevor du mit Xcode beginnst, sieh dir mal die ersten 3, 4 Vorlesungen an.

Hier der Link zu iTunes U, da sind auch die Lecture Slides un Reading Assignments mit dabei:
https://itunes.apple.com/us/course/developing-ios-11-apps-with-swift/id1309275316

Hier ein Github Repo mit den Assignments zum Nachprogrammieren: https://github.com/duliodenis/cs193p-Fall-2017
 

uhlhorn

Mitglied
Thread Starter
Mitglied seit
24.05.2005
Beiträge
2.450
Sei mir nicht böse, aber ich glaube dir fehlen noch einige Grundlagen.
Bestimmt fehlen mir eine Menge Grundlagen, daran habe ich gar keine Zweifel. ;-)

Ich will ja nur ganz simpel den den Pfad auslesen, damit ein Terminal-Befehl zusammenbauen und diesen ans Terminal senden. Das ist für einen Freund, der nicht mit dem Terminal umgehen kann und will.
Ich ahnte ja nicht, dass man dafür erst Softwaredevelopment studieren muss, um ein einzelnes Feld auszulesen. ;-)
 

Loki M

unregistriert
Mitglied seit
07.02.2005
Beiträge
3.513
Ah, Moment - das ist kein iOS Projekt, richtig? Sorry, mein Fehler. Am Mac gibts keine UIButtons, heisst die Klasse - Überraschung - NSButton

Bestimmt fehlen mir eine Menge Grundlagen, daran habe ich gar keine Zweifel. ;-)

Ich will ja nur ganz simpel den den Pfad auslesen, damit ein Terminal-Befehl zusammenbauen und diesen ans Terminal senden. Das ist für einen Freund, der nicht mit dem Terminal umgehen kann und will.
Ich ahnte ja nicht, dass man dafür erst Softwaredevelopment studieren muss, um ein einzelnes Feld auszulesen. ;-)
Naja - Wenn man das Zeugs (das ist schon mächtig mächtig wenn man will) verstehen will... wenns einfach wär könnts ja jeder
 

Loki M

unregistriert
Mitglied seit
07.02.2005
Beiträge
3.513
Einen Pfad ins Terminal legen kannst indem du die entsprechende Datei im Finder einfach ins Terminal ziehst :)
 

uhlhorn

Mitglied
Thread Starter
Mitglied seit
24.05.2005
Beiträge
2.450
Ja, ich weiß das. Ich kann mit dem Terminal ganz gut umgehen. ;-) Es gibt aber viele Leute, die das nicht können, was ungefähr 98 % aller Mac-User sein dürften.

> das ist kein iOS Projekt, richtig?
Nein, es soll eine macOS-Application werden.

Screenshot 2018-12-10 01.45.35.png
 

Loki M

unregistriert
Mitglied seit
07.02.2005
Beiträge
3.513
den NSButton musst nicht importieren, das kannst wieder löschen.
Stattdessen im Quellcode UIButton durch NSButton ersetzen.

Das bringt aber für deine Zwecke ohnehin nichts. Mir ging es nur darum zu zeigen wie man auf Properties von Variablen zugreift. Du müsstest also von deinem Pfad die url auslesen und von dieser den absoluteString.

Und was machst du dann mit dem Pfad? Anders gefragt wozu liest du den aus?
 

uhlhorn

Mitglied
Thread Starter
Mitglied seit
24.05.2005
Beiträge
2.450
den NSButton musst nicht importieren, das kannst wieder löschen.
Stattdessen im Quellcode UIButton durch NSButton ersetzen.
Ja, schon gesehen. ;-) Geht aber auch nicht.

Das bringt aber für deine Zwecke ohnehin nichts. Mir ging es nur darum zu zeigen wie man auf Properties von Variablen zugreift.
Ah …

Vielleicht mache ich das doch lieber in Applescript statt Swift. Dafür meine ich vorhin ein Beispiel gesehen zu haben.
 

uhlhorn

Mitglied
Thread Starter
Mitglied seit
24.05.2005
Beiträge
2.450
Ja, das wundert mich, dass Applescript besser sein soll, denn der Syntax von Swift sieht eigentlich ganz gut aus und ist nicht so vermurkst wie der von Applescript.

Apple hätte Applescript mal lieber so wie Rexx (oder ARexx) schreiben sollen. Das kann man besser nachvollziehen als diese pseudonatürliche Syntax von Applescript.

Egal, danke für Deine Hilfe. :)
 
  • Gefällt mir
Reaktionen: Loki M

Loki M

unregistriert
Mitglied seit
07.02.2005
Beiträge
3.513
Gut - Swift hat eine ganz andere Zielgruppe; das ist schon ein anderes Tier.

Vielleicht kannst dein Vorhaben auch in Python oder sowas realisieren. Die Optionen sind endlos. Viel Glück...
 

uhlhorn

Mitglied
Thread Starter
Mitglied seit
24.05.2005
Beiträge
2.450
Wobei in in Applescript ja auch solche Probleme mit Pfaden gibt! Mal sind es POSIX-Pfade, mal andere usw. Ich weiß auch nicht, warum so was überhaupt nötig ist. Warum machen die Entwickler nicht einfach drei unterschiedliche Befehle um den Pfad auszulesen. Und je nach Befehl bekommt man die entsprechende Schreibweise. DAS wäre einfach! Aber so sind das kaum überwindbare Hürden für Anfänger.

So was hier wünsche ich mir für Swift:
http://www.devedge.de/mac-os-x/appl...umwandeln-applescript-zu-posix-zu-applescript
 

uhlhorn

Mitglied
Thread Starter
Mitglied seit
24.05.2005
Beiträge
2.450
Ich habe mal in einem Forum nachgefragt, wo man sich auskennt. Und das ist die Lösung:

statt: let FileID:String = Quellpfad.stringValue
muss man URL nehmen: let FileID:URL = Quellpfad.url!
 

uhlhorn

Mitglied
Thread Starter
Mitglied seit
24.05.2005
Beiträge
2.450
Kann ich aber nicht finden. Du hast es keinmal so geschrieben wie ich es jetzt geschrieben habe, also als konkretes Beispiel.

Du hast so was geschrieben wie „Quellpfad.url.absoluteString zugreifen, um den Pfad als String zu bekommen.“ Nur damit kann ich als Anfänger leider nichts anfangen. Ich weiß nicht, wie ich Quellpfad.url.absoluteString zugreifen konkret umsetzen soll.

Aber das macht nichts. Jetzt klappt es ja. :)
Trotzdem danke sehr!

Inzwischen habe ich auch ausgetüftelt, wie ich das „file://“ abtrenne und einen Fehler vermeide, falls „file://" gar nicht existiert.
Und ob der Pfad okay ist oder nicht, halte ich in einem Flag fest.

// Quellpfad
if let Position = Quelle.range(of: "file://")?.upperBound {
Quellpfad = String(Quelle[Position...])
QuelleOK = true
}
else {
Quellpfad = "Keine Quelle vorhanden!"
QuelleOK = false
}


Jetzt muss ich nur noch austüfteln, wie ich meinen fertigen Terminalbefehl-String an das Terminal übergebe und ausführe.
Es wird langsam (aber mühsam)! :)
 

Loki M

unregistriert
Mitglied seit
07.02.2005
Beiträge
3.513
Sorry, es ist nicht immer einfach festzustellen was Anfänger bedeutet. Neu in Swift? Neu in Objektorientierung? Neu in Programmierung? Neu mit Computern?

Das "Finetuning" für den richtigen Level wenn das nicht klar ist ist schwer zu treffen.

Auch ist nicht leicht Fehler nachzustellen wenn man das jeweilige Projekt nicht vor sich hat, da man selbst nichts ausprobieren kann.
 

uhlhorn

Mitglied
Thread Starter
Mitglied seit
24.05.2005
Beiträge
2.450
Ja, das verstehe ich ja. ;-) Ich mache Dir ja auch gar keinen Vorwurf.
„Anfänger“ habe ich allerdings eingangs definiert. ;-)

Macht ja nichts. Jedenfalls funktioniert jetzt mein eben genannter Code aus Playground nicht mehr im eigentlichen Programm. Ich bekomme jetzt die Fehlermeldung: Cannot assign value of type 'String' to type 'NSPathControl!‘

Das lässt mich vermuten, dass meine Variable „Quelle“ … oh, Moment … ich glaube ich habe den Grund gerade gefunden! :) Ich habe die Definition nicht mit übernommen.
Tja, aller Anfang ist schwer. :)
 

uhlhorn

Mitglied
Thread Starter
Mitglied seit
24.05.2005
Beiträge
2.450
Ja, das kenne ich auch von anderen Sachen. :)
 

uhlhorn

Mitglied
Thread Starter
Mitglied seit
24.05.2005
Beiträge
2.450
Uli, ich habe etwas nicht bedacht: Wenn jemand eine Datei in das Feld zieht, muss die Datei ja vom Pfad angeschnitten werden. Denn ich will nur den Pfad zum Ordner haben.
Und der Pfad soll dann auch wieder ins Feld zurückgeschrieben werden, damit der Benutzer das korrekt dargestellt bekommt.

Danach muss ich noch prüfen, ob der Zielordner leer ist. Ansonsten darf ich das Terminalprogramm nicht ausführen.

Hmm, da habe ich ja noch einiges vor mir. :-/
 
Oben