Fehlermeldung unter Swift 4.2 mit dem Befehl NSString und doubleValue

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

Macoun 2019 - Frühbucherrabatt bis 26.7.2019

  • Fehlermeldung unter Swift 4.2 mit dem Befehl NSString und doubleValue

    Hallo zusammen,

    ich bin neu hier genauso auch mit meinem neuen Hobby xCode (Swift 4.2).

    Mein Problem, ich gehe gerade ein Testprogramm eines kleinen Taschenrechners auf Swift 4.2 für IOS durch. Ich finde Fehler den Fehler nicht. Ich mochte aus meinem Textfeld die Zahl also aus einem String die Zahl zur Berechnung nehmen.

    Ich bekomme immer eine Fehlermeldung! Argument labels '(String:)' do not match any available overloads

    Ich habe es aber alles so wie im Beispiel vorgegeben geschrieben. Liegt es daran, dass das Program von 2014 ist und das neue Swift 4.2 hier einen Fehler sieht.

    Wie schon geschrieben, bin in dem Gebiet neu. Sicherlich verstehe ich grundsätzlich die Funktionen der Zeilen und was es ausführen soll. Deshalb verstehe ich auch nicht die Fehlermeldung. Alle Variablen sind bekannt.

    Wäre toll wenn mir hier jemand weiter helfen kann und der Fehler verschwindet.

    Im Anhang habe ich mal ein Bildschirmscan gemacht vom Problem.

    Vielen Dank und Grüße,
    Uwe

    [IMG:blob:https://osxentwicklerforum.de/043ffa12-c496-410d-8e1e-47d3dd8b35fd]
    Bilder
    • Bildschirmfoto 2018-10-27 um 22.45.30.png

      265,07 kB, 2.370×962, 92 mal angesehen
  • Mac & i Test Abo
  • Ja. Das ist noch altes Swift 1 und schon laaaaaange überholt. Swift hat seit dem Erscheinen sehr viele Änderungen durchlaufen.

    Heute könnte das z.B. ungefähr so aussehen: let zahl1 = Double(Zahl1TField.text ?? "")

    Poste bitte keine Screenshots von Code, sondern copypaste den als Text in einen Codeblock.

    Noch was: Variablen werden erwartungsgemäß klein geschrieben. Also zahl1TField und nicht Zahl1TField.
    Das iPhone sagt: "Zum Antworten streichen". Wie? Echt Jetzt? Muß ich erst die Wohnung streichen!?
  • so, gerade mal getestet. jetzt habe ich hier einen neuen Fehler:

    im ViewControler.swift
    hinter Zeile 9. und 10. erschein folgende Fehlermeldung: Initialization of immutable value 'zahl1' was never used; consider replacing with assignment to '_' or removing it

    Quellcode

    1. import UIKit
    2. class ViewController: UIViewController {
    3. @IBOutlet weak var Zahl1TField: UITextField!
    4. @IBOutlet weak var Zahl2TField: UITextField!
    5. @IBOutlet weak var operatorSegementControl: UISegmentedControl!
    6. @IBOutlet weak var ErgebnisLabel: UILabel!
    7. @IBAction func berechnenButtonPress() {
    8. let zahl1 = Double(Zahl1TField.text ?? "")
    9. let zahl2 = Double(Zahl2TField.text ?? "")
    10. }
    Alles anzeigen


    und in AppDeligate kommt folgende Fehlermeldung: Thread 1: signal SIGABRT

    Quellcode

    1. import UIKit
    2. @UIApplicationMain
    3. class AppDelegate: UIResponder, UIApplicationDelegate {
    4. var window: UIWindow?



    so schwer kann es doch nicht sein.

    Bitte mal wieder um weitere Hilfe.

    Grüße,
    Uwe
  • uwe-peter schrieb:

    so, gerade mal getestet. jetzt habe ich hier einen neuen Fehler:

    im ViewControler.swift
    hinter Zeile 9. und 10. erschein folgende Fehlermeldung: Initialization of immutable value 'zahl1' was never used; consider replacing with assignment to '_' or removing it

    Quellcode

    1. import UIKit
    2. class ViewController: UIViewController {
    3. @IBOutlet weak var Zahl1TField: UITextField!
    4. @IBOutlet weak var Zahl2TField: UITextField!
    5. @IBOutlet weak var operatorSegementControl: UISegmentedControl!
    6. @IBOutlet weak var ErgebnisLabel: UILabel!
    7. @IBAction func berechnenButtonPress() {
    8. let zahl1 = Double(Zahl1TField.text ?? "")
    9. let zahl2 = Double(Zahl2TField.text ?? "")
    10. }
    Alles anzeigen

    Zur Begriffsklärung: Das hier ist ein Warning und kein Error, also ein (Warn)Hinweis und kein Fehler. Heißt, es kompiliert, aber irgendwas ist da vermutlich faul.
    Dieser Warnhinweis sagt auch genau das, was Sache ist: Du machst zwei lokale Zuweisungen, die Du nie irgendwo anders nutzt. Warum?
    Ich sehe da ein ErgebnisLabel. Möchtest Du mit diesen Zahlen eine Berechnung durchführen und dort das Ergebnis anzeigen? Dann solltest Du das auch tun. ;)

    PS: Danke, daß Du Code jetzt als Text in Codeblöcke setzt.^^
    PPS: Nochmals: Variablennamen bitte kleinschreiben Zahl1TField -> zahl1TField, ErgebnisLabel -> ergebnisLabel, etc.
    Das iPhone sagt: "Zum Antworten streichen". Wie? Echt Jetzt? Muß ich erst die Wohnung streichen!?
  • uwe-peter schrieb:

    hinter Zeile 9. und 10. erschein folgende Fehlermeldung: Initialization of immutable value 'zahl1' was never used; consider replacing with assignment to '_' or removing it
    Hier mal die Fehlermeldung auf deutsch:

    „Die Initialisierung des unveränderlichen Wertes "zahl1" wurde nie verwendet; überlegen Sie, ob Sie ihn durch die Zuordnung zu "_" ersetzen oder entfernen möchten.“

    Eine weitere Lösung wäre, wie oben in deinem Screenshot noch die print Anweisung hinzuzufügen.


    uwe-peter schrieb:

    in AppDeligate kommt folgende Fehlermeldung: Thread 1: signal SIGABRT
    Das ist häufig ein Zeichen dafür, dass irgendwo ein 'nil' ist, wo keins sein sollte. Sind alle Outlets auch verbunden?
  • Ok, muss mich wohl erst mit den Warn oder Fehlermeldungen auseinander setzen. Bei Basic oder Pascal vor 35 Jahren war dies nicht so, dass ich Informiert werde das ich eine Variable nicht benutze, hatte zwar die Warnung gelesen aber deshalb nicht verstanden, warum er mich darauf hinweist.

    Hier bei Swift scheint es doch etwas anders abzulaufen, Danke für die Info.

    Den Screenshot den ich gemacht habe mit den Print, sollte erst mal nur ein Test sein für die String Anweisung in einen festen Zahlenwert. Hatte ich dann nachher rausgenommen.

    Genau, nach der String in Fest Zahlenwert Umwandlung so nenne ich es mal, sollen die Zahlenwerte in einer Rechnung eingesetzt werden, halt der Taschenrechner. Ergebnis bei Button klick!

    Bei der zweiten Warnung Thread 1: signal SIGABRT hatte ich schon einmal gegoogelt . Genau da kam das mit den Fehlenden Verbindungen Outlets, hatte da aber nicht gefunden genau wie die Anweisung "Nil" ist nicht vorhanden.

    Mal schauen. Test weiter!

    Bleibe dran und berichte.

    Bin froh, das ich das Forum gefunden habe, Tolle Hilfe hier bei euch. Danke !!!

    Grüße,
    Uwe
  • Ihr hattet recht, es war der Wurm drin. zumindest bin ich für mich einen Schritt weiter gekommen. Die App startet jetzt wenigstens!

    Wollte nur eine kleine Rechnung wie hier zu sehen ist durchführen lassen und dann zur Anzeige bringen.

    Er bildet aber nur den Text der Variablen ab und nicht der Zahlenwert, wieso?

    Sicherlich denke ich noch zur Basic Zeit vor ein paar Jahrzehnten

    Wollte eine Rechnung in der Variable ergebnis erzeugen und dann ergebnis ausgeben. ob mit Anführungszeichen oder ohne, völlig egal geht nicht, zeigt nur (zahl1 + zahl2) am Bildschirm an.

    Quellcode

    1. @IBAction func ButtomBerechnen(_ sender: Any) {
    2. let zahl1 = Double(wertAnzahlHuehner.text ?? "")
    3. let zahl2 = Double(wertPreisProHuhn.text ?? "")
    4. print("Zahl1:\(zahl1)")
    5. print("Zahl2:\(zahl2)")
    6. var ergebnis = "(zahl1) + (zahl2)"
    7. print(ergebnis)
    8. self.umsatzWert.text = (ergebnis)

    Grüße,
    Uwe
  • Abgesehen von @Michaels Hinweis, muß Du außerdem noch bedenken, daß zahl1 und zahl2 jeweils Optionals sind, also vom Typ Double? und nicht Double. Für die Weiterberechnung mußt Du erst noch sicherstellen, daß das richtige Zahlenwerte sind und nicht nil.
    Das kann dann beispielhaft z.B. so aussehen:

    Quellcode

    1. @IBAction func ButtomBerechnen(_ sender: Any) {
    2. guard
    3. let zahl1 = Double(wertAnzahlHuehner.text ?? ""),
    4. let zahl2 = Double(wertPreisProHuhn.text ?? "")
    5. else {
    6. print("Fehler: Da stimmt was mit der Texteingabe nicht!")
    7. return
    8. }
    9. print("Zahl1: \(zahl1)")
    10. print("Zahl2: \(zahl2)")
    11. let ergebnis = zahl1 * zahl2
    12. print(ergebnis)
    13. self.umsatzWert.text = "\(ergebnis)"
    14. }
    Alles anzeigen
    Ich würde Dir empfehlen, Dich erst einmal mit diesen Basics zu beschäftigen… Optionals, Stringinterpolation mit \(), etc…
    Das iPhone sagt: "Zum Antworten streichen". Wie? Echt Jetzt? Muß ich erst die Wohnung streichen!?
  • erstmal vielen Dank für die zahlreichen Infos von euch.
    Ja, genau, ich habe mir die Basic´s nochmal durchgelesen und jetzt verstehe ich auch die Fehlermeldungen und konnte die Fehler dadurch beheben und kam auch in meinem Projekt wesentlich weiter.

    Auch Nullwert. also nil ist verstanden.



    Da habe ich doch gleich die nächste Frage!

    Ich möchte Bilder auf der Startseite der APP legen. Kann ich das mit einem Label machen.

    Grüße,
    Uwe