Ios 如何定义可以是两个对象之一的变量?
非常简单,我有两种按钮类型,略有不同。我试图创建一个变量,该变量可以在以后的代码中处理这两种类型。大概是这样的:Ios 如何定义可以是两个对象之一的变量?,ios,swift,types,any,Ios,Swift,Types,Any,非常简单,我有两种按钮类型,略有不同。我试图创建一个变量,该变量可以在以后的代码中处理这两种类型。大概是这样的: var button: Any If(condition one) button = NavButton() else button = IconButton() 我的按钮具有独特的设置功能。举个粗略的例子: button.setup(name: String) button.setup(int: Int) 当我调用它们时,超类/协议无法识别它们 如何做到最好?或者
var button: Any
If(condition one)
button = NavButton()
else
button = IconButton()
我的按钮具有独特的设置功能。举个粗略的例子:
button.setup(name: String)
button.setup(int: Int)
当我调用它们时,超类/协议无法识别它们
如何做到最好?或者这不是使用单个变量来完成的?我正在构建一个工厂类,它的函数几乎相同,只保存一个调用和一个参数 最明显的方法是将其声明为UIButton,假设两者都是实际的按钮
var button : UIButton
我的解决方案就是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)
}
希望这对其他人有所帮助。好的,我的问题是每种按钮类型都有一种方法的唯一版本。设置(名称:String)与设置(int:int)。当我尝试调用button.setup()上的后续调用时,由于未知的唯一性,它会抛出错误。我将更新上面的内容来说明这一点。对同一个函数名使用两个具有不同参数的子类没有多大意义;您需要一些逻辑来确定在给定实例上调用哪个函数,因此您也可以使用两个不同的函数,例如
setupWithString(String)
和setupWithInt(Int)
,这样您就可以使用单个超类了。看,就是这样。我不确定什么是正常的。我已经有一段时间没写这类代码了。非常感谢。