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