Nur Geldbeträge im Textfeld zulassen

  • Bertone105 schrieb:

    bin aber gerne für einen Feinschliff offen torquato.

    OK. Also dann. Ich habe mir mal eine Code-Zeile rausgesucht.

    Quellcode

    1. self.TextPaymentsMonthly.layer.borderWidth = CGFloat(Float(1.0));

    Hierzu vier Anmerkungen:

    1.) self
    Die Angabe von self ist überflüssig. Kann man einfach weglassen. Ist per se nicht wirklich falsch, aber einfach überflüssiger Buchstabensalat. self wird nur dann zwingend gebraucht, wenn es eine lokale Variable gibt, die eine gleichnamige übergeordnete Variable, wie z.B. eine Property, überlagert. Ich würd's eher weglassen, aber andere mögen es lieber verbos.

    2.) TextPaymentsMonthly
    Auch nicht per se falsch, aber doch irreführend. Die verschiedenen Programmiersprachen haben jeweils so ihre eigenen sprachlichen Gepflogenheiten. In Swift beginnen Variablen, Properties und Funktionsnamen (und -label) üblicherweise mit Kleinbuchstaben (lowerCamelCase), Typen fangen mit Großbuchstaben an.
    Wenn man Deinen Code liest, erwartet man bei TextPaymentsMonthly.irgenwas zuerst eine statische Methode des Typs TextPaymentsMonthly, bis man dann auf den Trichter kommt, daß es ja doch eine Instanzvariable ist.
    Da man Code wesentlich (!) häufiger liest, als daß man ihn schreibt, ist diese Leseerwartung auf lange Sicht durchaus von Bedeutung.
    Die Namenswahl ist auch nicht besonders glücklich, aber das ist ein Bereich, bei dem ich mich zugegebenermaßen auch immer ziemlich schwer tue. ;)

    3.) CGFloat(Float(1.0))
    Autsch. Hier wird's haarig. Das ist im Ergebnis ja nicht falsch, aber vollkommen von hinten durch die Brust ins Auge.
    CGFloat ist ExpressibleByFloatLiteral, diesen Initializer in einem Initializer kann man sich also wunderschön in die Haare schmieren und einfach nur 1.0 sagen (1 ginge sogar auch, weil CGFloat auch ExpressibleByIntegerLiteral ist).

    4.) ;
    So, hier mußte ich dann richtig schmunzeln! :D
    Du hast Dir ganz offensichtlich per Copy & Paste irgendwo Code besorgt, von jemandem, der aus der C-Welt kommt und selber noch nicht so richtig fit in Swift ist. Das paßt dann auch zu dem CGFloat-bloat. ;)
    In C-Sprachen muß man jedes Statement, also so grob fast jede Programmzeile, mit einem Semikolon abschließen, zwindend! In Swift ist das nicht nötig, aber weiter erlaubt, weil man in Swift damit mehrere Statements in einer einzelnen Zeile abtrennen kann.
    In Swift will aber niemand dieses lästige überflüssige Buchstabenrauschen sehen… ;)


    Unter dem Strich würde Deine obige Code-Zeile bei mir also wohl ungefähr so aussehen:

    Quellcode

    1. monthlyPaymentTF.layer.borderWidth = 1.0
    Soviel zu meinem Rotstift. Einfach nur ein paar gut gemeinte, wohlwollende launische Anmerkungen… ;)

    PS: TextPaymentsMonthly.delegate = self Du kannst den delegate des TextFields auch im Storyboard festlegen. Ctrl-Klick im Textfeld und dann per Drag&Drop-Linie das Outlet 'delegate' mit der Klasse im Quellcode verbinden. Auf YT finden sich Videos, die zeigen, wie das aussieht…
    Twix heißt jetzt Raider!