如何使用一个变量/属性而不是分配相同的属性三次?



让我们假设myVar在每个视图实现中都具有相同的功能。我试图弄清楚如何声明/公开某种仅设置属性,而不是将它们分配 n 次(创建每个新视图(,但我没有任何想法。如何重构为一行和一次性分配?

var myVar: (()-> Void)?
private func callBack() {
someClass.view1.myVar = self.myVar
someClass.view2.myVar = self.myVar
someClass.view3.myVar = self.myVar
}
// MARK: - someClass pseudocode
someClass: class {
let view1: CustomView: = CustomView
let view2: CustomView: = CustomView
let view3: CustomView: = CustomView
}
// MARK: - customView pseudocode
class CustomView: UIView {
var myVar: (()-> Void)?
}

类似的东西,但是将所有CustomViews放在数组中是个好主意,也可以在这里实现

var a: (() -> Void)?
class CustomView: UIView {
var myVar: (() -> Void)?
}
class SomeClass {
let view1 = CustomView()
let view2 = CustomView()
let view3 = CustomView()
var myVar: (() -> Void)? {
set {
self.view2.myVar = newValue
self.view1.myVar = newValue
self.view3.myVar = newValue
}
get {
return self.myVar
}
}
}
let b = SomeClass()
b.myVar = ({print(3)})
b.view1.myVar!()

这是你想做的吗?

[someClass.view1, someClass.view2, someClass.view3].forEach { $0.myVar = self.myVar }

这就是我处理这些问题的方式:

class OtherClass {
var text: String?
init(text: String?) {
self.text = text;
}
}
class TestClass {
var thing1: OtherClass?
var thing2: OtherClass?
var thing3: OtherClass?

var allTheThings: [OtherClass?] { return [thing1, thing2, thing3]}
var ownText: String? {
didSet {
allTheThings.forEach { $0?.text = ownText }
}
}
}

根据你期望事情变化的程度,你可以使数组属性成为你在 init 中设置的常量,而不是计算属性。

如果你想变得花哨,你也可以做这样的事情来设置:

private var allTheThings: [OtherClass?] {
get {
return [thing1, thing2, thing3]
}
set {
guard newValue.count == 3 else {
//probably should put an assertion in here
return
}
thing1 = newValue[0]
thing2 = newValue[1]
thing3 = newValue[2]
}
}
init() {
self.allTheThings = Array(repeating: OtherClass(text: "Test"), count: 3)
}