真的很简单,我有两种按钮类型略有不同。我正在尝试创建一个可以在代码中稍后处理这两种类型的变量。像这样:
var button: Any
If(condition one)
button = NavButton()
else
button = IconButton()
我的按钮具有独特的设置功能。作为一个粗略的例子:
button.setup(name: String)
button.setup(int: Int)
当我调用它们时,超类/协议无法识别它们。
这怎么做得最好?或者这不是使用单个变量吗?我正在构建一个几乎完全相同的工厂类,保存ONE调用和ONE参数。
答案 0 :(得分:1)
最明显的方法是将其声明为UIButton,假设两者都是实际按钮。
var button : UIButton
答案 1 :(得分:0)
我的解决方案是Paulw11提到的。我需要为每个参数类型创建两个独特的超级函数。大多数人可能都很明显,但如果没有,那就是答案。
我创建了一个协议,然后将其扩展为具有两个函数的超类。我认为使用超类作为初始类型,然后在后续行中更改它们,门控独特的方法。
protocol MyButton {
func setupString(s: String)
func setupInt(i: Int)
}
public class CustomButton: UIButton, MyButton {
func setupString(s: String) {}
func setupInt(i: Int) {}
}
class ButtonString:CustomButton {
override func setupString(s: String) {}
}
class ButtonInt:CustomButton {
override func setupInt(i: Int) {}
}
然后按照这样使用它们:
var myButton: CustomButton = CustomButton()
if(string) {
myButton = ButtonString()
myButton.setupString("Hello World")
} else {
myButton = ButtonInt()
myButton.setupInt(42)
}
希望这有助于某人。