Swift中的实例属性与参数
前几天,我重构了代码。 我有
扩展MainController:TabBarViewDelegate {func buttonDidPress索引:Int){
让initialIndex = tabBarView.selectedIndex
让WholeAppContentView = updateWholeAppContentView()
view.addSubview(wholeAppContentView)
}
}
委托方法看起来不正确,因为很难区分所需的委托方法还是实例方法。 它也缺少一个主题。 我喜欢这个API设计后的文章,您可以阅读Rule 19: Always say who's talking
这是一条简单的规则,同样容易犯错误。 在您的委托方法中,始终将发送方作为参数传递。 总是。 即使是单身人士。 即使对于您无法想象的事物,也可能会同时使用多次。 没有例外。
因此,我重构了代表并遵守了该代表。
扩展MainController:TabBarViewDelegate {func tabBarView(_ view:TabBarView,buttonDidPress index:Int){
让initialIndex = tabBarView.selectedIndex
让WholeAppContentView = updateWholeAppContentView()
view.addSubview(wholeAppContentView)//这是罪魁祸首
}
}
即使MainController.swift
只有1行更改,整个UI也会中断,因为所有视图都已添加到选项卡栏中。 range。
不久之后,我就记得如果parameter
具有相同的名称,则该parameter
优先于instance property
。 因此,在这种情况下,编译器会在没有警告的情况下假设您正在处理TabBarView
视图
这就是为什么您经常使用self
来消除歧义的原因。
struct用户:可编码,可平等{
让firstName:字符串
let lastName:String init(firstName:String,lastName:String){
self.firstName =名字
self.lastName =姓氏
}
}
回到我们的代码。 解决方法是指定self
以指定MainController
view
self.view.addSubview(wholeAppContentView)
好吧,您可能会说,如果选项卡栏发生更改,谁应该再次添加视图😬这是一个不好的例子,但经验教训😇
原始故事https://github.com/onmyway133/blog/issues/72