我有一个类似的UIView子类:

class AView: UIView {
    var aString = "A String"
    var aBool = true

    override func didMoveToSuperview() {
        func doSomethingWithTheString() {
            if aBool {
                doSomething(withString: aString)
            }
        }
    }
}

然后,我将UIView添加到情节提要中,并将其类设置为AView。我将其链接到我的视图控制器,并执行以下操作:
@IBOutlet weak var aView: AView!

override func viewDidLoad() {
    aView.aBool = false
    aView.aString = "Another String"
}

问题是,即使将doSomethingWithTheString()更改为aBooltrue仍然是"A String",而aString仍然是viewDidLoad()

那么在AView中是否可以放置doSomethingWithTheString()以便仅在设置了所有属性后才能调用它?我希望didMoveToSuperview()可以解决问题,但显然还为时过早。

我曾想在属性的设置器中调用它,但我不知道将设置哪些属性,哪些将保留其默认值,并且仅应在设置了最后一个属性时才调用它。

最佳答案

将aString和aBool放入字典(aDictionary)中,然后声明

var aDictionary: NSDictionary? {
    didSet{
        doSomethingWithTheString()
    }
}

当然,请更改doSomethingWithTheString()以使用字典

08-06 00:56