Probleme mit Optionals

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

  • Probleme mit Optionals

    Hallo,

    Ich habe ein einfaches Konvertierungsprogramm geschrieben. Alle Eingaben funktionieren, nur wenn der user in das kg Feld etwas hineinschreibt und es in lbs konvertiert, dann gibt es einen crash mit der Fehlermeldung: Thread 1: Fatal error: Unexpectedly found nil while unwrapping an Optional value. Ich freue mich sehr ueber Rueckmeldung, um sicherzugehen, dass ich das Thema Optionals noch mehr durchdringe. Anbei code und interface

    Quellcode

    1. class ConversionVC: UIViewController, UITextFieldDelegate {
    2. @IBOutlet weak var stackDistance: UIStackView!
    3. @IBOutlet weak var stackWeight: UIStackView!
    4. @IBOutlet weak var stackLIquid: UIStackView!
    5. @IBOutlet weak var lbs: UITextField!
    6. @IBOutlet weak var kg: UITextField!
    7. @IBOutlet weak var liter: UITextField!
    8. @IBOutlet weak var gallons: UITextField!
    9. @IBOutlet weak var km: UITextField!
    10. @IBOutlet weak var miles: UITextField!
    11. var status = 0
    12. var unitInput: Double = 0
    13. var result: Double = 0
    14. // var factor: Double = 0
    15. @IBOutlet weak var selectMeasurement: UISegmentedControl!
    16. override func viewDidLoad() {
    17. super.viewDidLoad()
    18. stackWeight.isHidden = false
    19. stackDistance.isHidden = true
    20. stackLIquid.isHidden = true
    21. lbs.delegate = self
    22. kg.delegate = self
    23. liter.delegate = self
    24. gallons.delegate = self
    25. km.delegate = self
    26. miles.delegate = self
    27. }
    28. func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    29. let allowedCharacters = ".0123456789"
    30. let allowedCharacterSet = CharacterSet(charactersIn: allowedCharacters)
    31. let typedCharacterSet = CharacterSet(charactersIn: string)
    32. return allowedCharacterSet.isSuperset(of: typedCharacterSet)
    33. }
    34. @IBAction func reset(_ sender: Any) {
    35. lbs.text = ""
    36. kg.text = ""
    37. liter.text = ""
    38. gallons.text = ""
    39. km.text = ""
    40. miles.text = ""
    41. }
    42. override func didReceiveMemoryWarning() {
    43. super.didReceiveMemoryWarning()
    44. }
    45. @IBAction func convert(_ sender: Any)
    46. {
    47. if stackWeight.isHidden == false
    48. {
    49. if lbs.text == " " && kg.text != " "
    50. {
    51. unitInput = Double(kg.text!)!
    52. lbs.text = String(calculateMulti(factor: 2.2))
    53. }
    54. else
    55. {
    56. unitInput = Double(lbs.text!)!
    57. kg.text = String(calculateDivi(factor: 2.2))
    58. }
    59. }
    60. if stackLIquid.isHidden == false
    61. {
    62. if liter.text == "" && gallons.text != ""
    63. {
    64. unitInput = Double(gallons.text!)!
    65. liter.text = String(calculateMulti(factor: 3.78))
    66. }
    67. else
    68. {
    69. unitInput = Double(liter.text!)!
    70. gallons.text = String(calculateDivi(factor: 3.78))
    71. }
    72. }
    73. if stackDistance.isHidden == false
    74. {
    75. if miles.text == "" && km.text != ""
    76. {
    77. unitInput = Double(km.text!)!
    78. miles.text = String(calculateDivi(factor: 1.6))
    79. }
    80. else
    81. {
    82. unitInput = Double(miles.text!)!
    83. km.text = String(calculateMulti(factor: 1.6))
    84. }
    85. }
    86. }
    87. @IBAction func indexChanged(_ sender: Any) {
    88. switch selectMeasurement.selectedSegmentIndex{
    89. case 0: stackWeight.isHidden = false
    90. stackDistance.isHidden = true
    91. stackLIquid.isHidden = true
    92. print("selected 0")
    93. case 1:
    94. stackDistance.isHidden = false
    95. stackWeight.isHidden = true
    96. stackLIquid.isHidden = true
    97. print ("selected 1")
    98. case 2: stackLIquid.isHidden = false
    99. stackDistance.isHidden = true
    100. stackWeight.isHidden = true
    101. print ("selected 2")
    102. default: break
    103. }
    104. }
    105. func calculateMulti(factor: Double)-> Double
    106. {
    107. result = unitInput * factor
    108. return result
    109. }
    110. func calculateDivi(factor: Double)-> Double
    111. {
    112. result = unitInput/factor
    113. return result
    114. }
    115. }
    Alles anzeigen
    Bilder
    • Screen Shot 2018-10-05 at 11.41.11 AM.png

      61,77 kB, 461×786, 12 mal angesehen
  • Mac & i Test Abo
  • Quellcode

    1. if lbs.text == " " && kg.text != " "
    2. if liter.text == "" && gallons.text != ""
    Fällt Dir zwischen diesen beiden, aus Deinem Code rauskopierten Zeilen, ein kleiner Unterschied auf? ;)

    Besser wäre, wenn man so an die Sache rangeht, wahrscheinlich string.isEmpty statt string == "".
    Das iPhone sagt: "Zum Antworten streichen". Wie? Echt Jetzt? Muß ich erst die Wohnung streichen!?