如何有条件地将结构分配给变量?

How to conditionally assign a struct to a variable?

代码很容易解释。我试图让字典变量成为 3 个结构之一。我现在可能有一个简单的解决方案。

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]
 …

使用结构的实现如下:

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("")
    }

}

使用 类 的实现如下:

   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("")
    }
    
}