0

I'm getting this error code:

error: Execution was interrupted, reason: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0). The process has been left at the point where it was interrupted, use "thread return -x" to return to the state before expression evaluation.

And the PlayGround said:

Fatal error: Unexpectedly found nil while implicitly unwrapping an Optional value: file BilanDico-04.playground, line 137

Here's my code:

import Foundation import UIKit let TableauDesBesoinsQuotidienEnVitaminesretenues : [String : Float] = [ "aRetinol" : 800, "aBetacarotene" : 2100, "vitamineC" : 80, "vitamineB1" : 1.1, "calcium" : 800, "omega3" : 2 ] let TableauDesVitaminesRetenuesPourObjectifs : [String] = [ "aRetinol", "aBetacarotene", "vitamineC", "vitamineB1", "calcium", "omega3" ] class AlimentObject { var id = UUID().uuidString var nomAliment = "Nouvel aliment" var poids : Float = 100 var calories : Float = 0 var proteines : Float = 0 var lipides : Float = 0 var glucides : Float = 0 var aRetinol : Float = 0 var aBetacarotene : Float = 0 var vitamineC : Float = 0 var vitamineB1 : Float = 0 var calcium : Float = 0 var omega3 : Float = 0 var comments : String = "" var premierBooleen: Bool var optimize: Bool init(nomAliment: String, poids: Float, calories: Float, proteines: Float, lipides: Float, glucides: Float, aRetinol: Float, aBetacarotene: Float, vitamineC: Float, vitamineB1: Float, calcium: Float, omega3: Float, comments:String, premierBooleen: Bool, optimize: Bool) { self.nomAliment = nomAliment self.poids = poids self.calories = calories self.proteines = proteines self.lipides = lipides self.glucides = glucides self.aRetinol = aRetinol self.aBetacarotene = aBetacarotene self.vitamineC = vitamineC self.vitamineB1 = vitamineB1 self.calcium = calcium self.omega3 = omega3 self.comments = comments self.premierBooleen = false self.optimize = false } convenience init() { self.init(nomAliment: "Aliment intialisé à zéro", poids: 100, calories: 0, proteines: 0, lipides: 0, glucides: 0, aRetinol: 0, aBetacarotene: 0, vitamineC: 0, vitamineB1: 0, calcium: 0, omega3: 0, comments: "", premierBooleen: false, optimize: false) } } class Donnees { static var AlimentListWithSections = [[AlimentObject]]() static let list1 = [ AlimentObject(nomAliment: "Blanc de poulet", poids: 100, calories: 108, proteines: 24, lipides: 1, glucides: 0, aRetinol: 8, aBetacarotene: 0, vitamineC: 0, vitamineB1: 0.08, calcium: 8, omega3: 0.03, comments: "sdsdsdsdsd sdsddsdsd", premierBooleen: false, optimize: false), AlimentObject(nomAliment: "Avocat", poids: 100, calories: 147, proteines: 1.76, lipides: 13.80, glucides: 1.57, aRetinol: 0, aBetacarotene: 55, vitamineC: 5.49, vitamineB1: 0.05, calcium: 11.2, omega3: 0.08, comments: "aaaaaaaaa sdsddsdsd", premierBooleen: false, optimize: false), AlimentObject(nomAliment: "Amandes", poids: 100, calories: 634, proteines: 21, lipides: 53, glucides: 8, aRetinol: 8, aBetacarotene: 1, vitamineC: 0.8, vitamineB1: 0.18, calcium: 248, omega3: 0.06, comments: "fffffff sdsddsdsd", premierBooleen: false, optimize: false) ] static let list2 = [ AlimentObject(nomAliment: "Poivron Jaune", poids: 100, calories: 29.2, proteines: 1, lipides: 5.42, glucides: 0.21, aRetinol: 0, aBetacarotene: 120, vitamineC: 184, vitamineB1: 0.03, calcium: 11, omega3: 0.02, comments: "lllllllssss", premierBooleen: false, optimize: false), AlimentObject(nomAliment: "Saumon cru", poids: 100, calories: 192, proteines: 20.5, lipides: 12.2, glucides: 0, aRetinol: 8, aBetacarotene: 0, vitamineC: 1.6, vitamineB1: 0.21, calcium: 8, omega3: 1.79, comments: "eeeeeeee", premierBooleen: false, optimize: false) ] static let list3 : [AlimentObject] = [ AlimentObject(nomAliment: "Avocat", poids: 100, calories: 147, proteines: 1.76, lipides: 13.80, glucides: 1.57, aRetinol: 0, aBetacarotene: 55, vitamineC: 5.49, vitamineB1: 0.05, calcium: 11.2, omega3: 0.08, comments: "aaaaaaaaa sdsddsdsd", premierBooleen: false, optimize: false), ] static let list4 : [AlimentObject] = [ AlimentObject(nomAliment: "Amandes", poids: 100, calories: 634, proteines: 21, lipides: 53, glucides: 8, aRetinol: 8, aBetacarotene: 1, vitamineC: 0.8, vitamineB1: 0.18, calcium: 248, omega3: 0.06, comments: "fffffff sdsddsdsd", premierBooleen: false, optimize: false) ] static let list5 : [AlimentObject] = [] static let listVide : [AlimentObject] = [] static let listDuJour = [list1, list2, list3, list4, list5] } class AlimentFunctions { // sommer des Float d'une macro du Menu et sortir un Float static func sumDUneMacroDuMenuToFloat(NameList list: [[AlimentObject]], macro: String) -> Float { var totalsection: Float = 0.0 var total: Float = 0.0 list.forEach { totalsection = 0 $0.forEach({ (aliment) in if let value = Mirror(reflecting: aliment).children.first(where: { $0.label == macro })?.value as? Float { totalsection += value } }) total += totalsection } return total } } class TotauxVitamineMineraux { static func DicoDesTotauxPaffonesEtNonPlaffonesDesVitamines(with menu: [[AlimentObject]], tableauDesNomsDesMacrosRetenues: [String], tableauDesValeursDesMacros: [String: Float]) -> [String: (Float, Float, Float, Float, Float)] { var dico: [String: (Float, Float, Float, Float, Float)]! for macro in tableauDesNomsDesMacrosRetenues { let premier = tableauDesValeursDesMacros[macro]! let second = AlimentFunctions.sumDUneMacroDuMenuToFloat(NameList: menu, macro: macro) let troisieme = second / tableauDesValeursDesMacros[macro]! * 100 var quatrieme = second if second > 100 { quatrieme = 100 } if second <= 100 { quatrieme = second } let cinquieme = quatrieme / tableauDesValeursDesMacros[macro]! * 100 dico[macro] = (premier, second, troisieme, quatrieme, cinquieme) } return dico } } let dico = TotauxVitamineMineraux.DicoDesTotauxPaffonesEtNonPlaffonesDesVitamines(with: Donnees.listDuJour, tableauDesNomsDesMacrosRetenues: TableauDesVitaminesRetenuesPourObjectifs, tableauDesValeursDesMacros: TableauDesBesoinsQuotidienEnVitaminesretenues) print(dico) 

The error is in this line: dico[macro] = (premier, second, troisieme, quatrieme, cinquieme)

2
  • Where is line 137 in your code (where the error occurs)? Commented Sep 9, 2020 at 18:44
  • 1
    It's in this line: dico[macro] = (premier, second, troisieme, quatrieme, cinquieme) Commented Sep 9, 2020 at 18:59

1 Answer 1

1

var dico: [String: (Float, Float, Float, Float, Float)]! guarantees that this dictionary will exist, but nothing creates it. Then the program crashes when you try to put something into a nil dictionary that you've said will not be nil.

Sign up to request clarification or add additional context in comments.

2 Comments

So what should i do?
Create a dictionary before trying to put things into it.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.