Swift中didSet属性观察者可通过return退出?是否类似计算属性?
关于Swift中didSet里使用return的疑问解答
首先明确给你结论:didSet并不支持返回值,它本质是一个无返回类型的代码执行块,和普通的Void类型函数/闭包逻辑一致。
你在didSet里用return能退出,并不是因为它能接收返回值,而是return在这里的作用是提前终止当前代码块的执行——就像你在一个没有返回值的函数里写return一样,只是用来跳过后续的代码逻辑,不是返回任何内容。
举个和你代码场景匹配的例子:
class AppDetailController: UICollectionViewController { var app: App? { didSet { // 当app的截图为空时,直接退出didSet,不执行后续UI更新逻辑 guard let app = app, !app.screenshots.isEmpty else { return // 这里只是终止didSet的执行,和返回值无关 } // 后续的UI刷新等逻辑 collectionView.reloadData() } } }
这里的return只是告诉编译器:“到这里就停,后面的代码不用执行了”,和计算属性的getter必须返回值完全是两回事——计算属性的getter是用来提供属性值的,所以必须返回;而didSet是属性值变更后的“副作用处理”,它不需要返回任何东西,自然也不支持返回值。
另外补充个小细节:willSet和didSet这两个属性观察器,都属于无返回值的执行块,你在里面写return都是用来提前退出,和返回值没有任何关联。
内容的提问来源于stack exchange,提问作者Ninja
相关产品推荐
相关产品推荐

