在我的课程中,我使用了几个变量进行计算,但是当我在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
}
}
在控制器中我需要词典,因为我在UIPickerView
和UITableView
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
}
当我在字典中进行更改时,我需要更改变量以在类中使用更新的变量进行进一步计算。是否可以使用var
和dictionary
的声明进行宣传?或者我需要编写一个方法,每次字典更改时都会更新变量?
感谢您的帮助!
答案 0 :(得分:0)
最好的方法是将one
,two
,three
,four
转换为由字典支持的计算属性。这样,您的属性和字典将始终保持同步:
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