Home > OS >  How to conditionally assign a struct to a variable?
How to conditionally assign a struct to a variable?

Time:01-20

The code is pretty self explanatory. I am trying to have the dictionary variable be one of 3 structs. There is likely a simple solution that escapes me at the moment.

func whichDictionaryToUse(flaps: Int, wind: Int) {

var dictionary = ()
var possibleWindDictionaries = Set<[Double:Double]>()

switch flaps {
case 10: dictionary = CorrectLD10Dict()
case 15: dictionary = CorrectLD15Dict()
case 35: dictionary = CorrectLD35Dict()
default: print("Present alert saying flaps value out of range")
}

switch wind {
  case 10: possibleWindDictionaries = [dictionary.plusTenMinusTwoDic, dictionary.plusTenMinusOneDic, dictionary.plusTenZeroDic, dictionary.plusTenPlusOneDic, dictionary.plusTenPlusTwoDic]
 …

CodePudding user response:

Implementation using structs is below:

struct CorrectLD10Dict: CorrectLDict {
    var plusTenMinusTwoDic = [Double : Double]()
    var plusTenMinusOneDic = [Double : Double]()
    var plusTenZeroDic     = [Double : Double]()
    var plusTenPlusOneDic  = [Double : Double]()
    var plusTenPlusTwoDic  = [Double : Double]()
}
struct CorrectLD15Dict: CorrectLDict {
    var plusTenMinusTwoDic = [Double : Double]()
    var plusTenMinusOneDic = [Double : Double]()
    var plusTenZeroDic     = [Double : Double]()
    var plusTenPlusOneDic  = [Double : Double]()
    var plusTenPlusTwoDic  = [Double : Double]()
}
struct CorrectLD35Dict: CorrectLDict {
    var plusTenMinusTwoDic = [Double : Double]()
    var plusTenMinusOneDic = [Double : Double]()
    var plusTenZeroDic     = [Double : Double]()
    var plusTenPlusOneDic  = [Double : Double]()
    var plusTenPlusTwoDic  = [Double : Double]()
}

protocol CorrectLDict {
    var plusTenMinusTwoDic: [Double:Double] { get set }
    var plusTenMinusOneDic: [Double:Double] { get set }
    var plusTenZeroDic    : [Double:Double] { get set }
    var plusTenPlusOneDic : [Double:Double] { get set }
    var plusTenPlusTwoDic : [Double:Double] { get set }

}



func whichDictionaryToUse(flaps: Int, wind: Int) {

    var dictionary: CorrectLDict? = nil
    var possibleWindDictionaries = Set<[Double:Double]>()

    switch flaps {
    case 10: dictionary = CorrectLD10Dict()
    case 15: dictionary = CorrectLD15Dict()
    case 35: dictionary = CorrectLD35Dict()
    default: print("Present alert saying flaps value out of range")
    }

    guard let dictionary = dictionary else { return }

    switch wind {
    case 10: possibleWindDictionaries = [dictionary.plusTenMinusTwoDic, dictionary.plusTenMinusOneDic, dictionary.plusTenZeroDic, dictionary.plusTenPlusOneDic, dictionary.plusTenPlusTwoDic]
    default:
        print("")
    }

}

Implementation using classes is below:

   class CorrectLDict {
    var plusTenMinusTwoDic = [Double : Double]()
    var plusTenMinusOneDic = [Double : Double]()
    var plusTenZeroDic     = [Double : Double]()
    var plusTenPlusOneDic  = [Double : Double]()
    var plusTenPlusTwoDic  = [Double : Double]()
}

class CorrectLD10Dict: CorrectLDict  {}
class CorrectLD15Dict: CorrectLDict {}
class CorrectLD35Dict: CorrectLDict {}

func whichDictionaryToUse(flaps: Int, wind: Int) {
    
    var dictionary: CorrectLDict? = nil
    var possibleWindDictionaries = Set<[Double:Double]>()
    
    switch flaps {
    case 10: dictionary = CorrectLD10Dict()
    case 15: dictionary = CorrectLD15Dict()
    case 35: dictionary = CorrectLD35Dict()
    default: print("Present alert saying flaps value out of range")
    }
    
    guard let dictionary = dictionary else { return }
    
    switch wind {
    case 10: possibleWindDictionaries = [dictionary.plusTenMinusTwoDic, dictionary.plusTenMinusOneDic, dictionary.plusTenZeroDic, dictionary.plusTenPlusOneDic, dictionary.plusTenPlusTwoDic]
    default:
        print("")
    }
    
}
  •  Tags:  
  • Related