字典中的变量与类

时间:2016-05-21 10:36:46

标签: swift variables dictionary

在我的课程中,我使用了几个变量进行计算,但是当我在Controller中启动此类的对象时,我使用字典。

这是简单的代码:

class MyClass {

  var one: Float = 1.0
  var two: Float = 2.0
  var three: Float = 3.0
  var four: Float = 4.0

  var dictionary = [String: Float]()

  init(type: String) { // Here I use dictionary
    switch type {
      case "type1":
        self.dictionary = ["one": one, "two": two]
      case "type2":
        self.dictionary = ["three": three, "four": four]
      default:
        break
    }
  }

  func calculate() -> Float { // And here I use variables
    return one + two
  }    
}

在控制器中我需要词典,因为我在UIPickerViewUITableView s标签中使用了密钥等等。

但我需要在字典中的变量和类中的变量之间建立强大的联系。

所以,当我在控制器中使用时:

myClass = MyClass(type: "type1")

override func viewDidLoad() {
  super.viewDidLoad()
  myClass.dictionary["one"] = 1.5 // ["one": 1.5, "two": 2.0]
  print(myClass.one) // 1.0 but I need 1.5
}

当我在字典中进行更改时,我需要更改变量以在类中使用更新的变量进行进一步计算。是否可以使用vardictionary的声明进行宣传?或者我需要编写一个方法,每次字典更改时都会更新变量?

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

最好的方法是将onetwothreefour转换为由字典支持的计算属性。这样,您的属性和字典将始终保持同步:

class MyClass {
    var dictionary = [String: Float]()

    var one: Float {
        get { return self.dictionary["one"]! }
        set { self.dictionary["one"] = newValue }
    }
    var two: Float {
        get { return self.dictionary["two"]! }
        set { self.dictionary["two"] = newValue }
    }
    var three: Float {
        get { return self.dictionary["three"]! }
        set { self.dictionary["three"] = newValue }
    }
    var four: Float {
        get { return self.dictionary["four"]! }
        set { self.dictionary["four"] = newValue }
    }

    init(type: String) {
        switch type {
        case "type1":
            self.dictionary = ["one": 1.0, "two": 2.0]
        case "type2":
            self.dictionary = ["three": 3.0, "four": 4.0]
        default:
            break
        }
    }

    func calculate() -> Float {
        return one + two
    }
}

// Usage:
let myClass = MyClass(type: "type1")
myClass.dictionary["one"] = 1.5

print(myClass.one)          // 1.5
print(myClass.calculate())  // 2.0