swift - 两个类使用相同的函数来创建自定义视图 - Swift
问题描述
我对 Swift 有点陌生,我无法弄清楚这一点。我有两个类,我需要使用相同的函数来设置自定义 UIStackVIew(显示评级星的评级控件)。每个类都有一个value
需要在函数内部传递的变量。我不想在每个类中复制 setUpStackView 函数的相同代码。我有以下代码:
class Class1: UIStackView {
var variable1 = "value1"
override init(frame: CGRect){
super.init(frame: frame)
}
required init?(coder aDecoder: NSCoder){
super.init(coder: aDecoder)
}
setUpStackView(value: variable1)
}
class Class2: UIStackView {
var variable2 = "value2"
override init(frame: CGRect){
super.init(frame: frame)
}
required init?(coder aDecoder: NSCoder){
super.init(coder: aDecoder)
}
setUpStackView(value: variable2)
}
extension Class1 {
func setUpStackView(value: String){
//code to set UIStackView rating control and to use the variable value
}
}
我怎样才能实现扩展Class2
?我被这个困住了。任何帮助将不胜感激!
解决方案
一种解决方案可以将公共代码移动到协议中,您可以在其中抽象出:
protocol BaseStackView {
var variable :String { get set }
}
class Class1: UIStackView,BaseStackView {
var variable = "value1"
override init(frame: CGRect){
super.init(frame: frame)
self.setUpStackView(value: variable)
}
required init(coder: NSCoder) {
super.init(coder: coder)
self.setUpStackView(value: variable)
}
}
class Class2: UIStackView,BaseStackView {
var variable = "value2"
override init(frame: CGRect){
super.init(frame: frame)
self.setUpStackView(value: variable)
}
required init(coder: NSCoder) {
super.init(coder: coder)
self.setUpStackView(value: variable)
}
}
extension UIStackView {
func setUpStackView(value: String) {
//Your setup here
}
}
推荐阅读
- reactjs - 覆盖 Material UI 类?
- asp.net-core-webapi - 为什么我们做HttpPut请求时要发送身份和实体
- python - 有没有办法提高 opencv 视频处理的速度?
- python - 我可以帮助理解我的 python SQL 查询中的语法错误吗?
- python - 如何解决这个问题 [SpyderKernelApp] 警告 | 没有这样的通讯:
- node.js - 如何使用 graphql 和 cloudinary 正确上传
- javascript - 如何在 vue js 应用程序中访问域名?
- owl - 在 Semantic Media Wiki 中导入 .owl 文件
- html - div上的CSS框阴影在边缘不起作用
- excel - IF weeknumber <= "53" And weeknumber >= "1" 在 6, 7, 8, 9 下不起作用