【问题标题】:Setting Variable to Different Custom View Based on Qualifier (Swift)根据限定符将变量设置为不同的自定义视图(Swift)
【发布时间】:2019-01-20 09:46:09
【问题描述】:
我有一个视图控制器,每次初始化时都会在视图之间切换(即第一次初始化它应该使用 View1,第二次它应该使用 View2,等等)。
如何使用一个变量并将其设置为这两个视图之一,具体取决于它应该是哪一个?
我尝试将视图声明为 UIView,然后将其实例化为 View1 或 View2,但随后无法访问 View1/View2 中的属性,因为“UIView 没有名为 X 的属性”。每次我需要访问属性时,我都可以将视图投射到 View1 或 View2,但这似乎很草率。
【问题讨论】:
标签:
ios
swift
view
uiviewcontroller
【解决方案1】:
您可以为 View1 设置一个变量,为 View2 设置另一个变量,然后使用布尔值或枚举来指示当前呈现的是哪个视图。
如果您只想为两个视图使用一个变量,则两个视图必须确认相同的协议,否则您必须使用向下转换。像这样:view as! MyView1 或 view as! MyView2 绕过类型检查。
【解决方案2】:
@ukim 提到了协议,这是正确的答案。通过示例添加此内容。
class CustomViewController: UIViewController{
var customView: CustomViewProtocol?
func updateCustomView( string: String){
guard let customView = customView else {return}
customView.doSomething()
customView.doSomethingElse(with string)
}
}
protocol CustomViewProtocol {
func doSomething()
func doSomethingElse(with this: String)
}
class CustomViewOne: UIView{
}
extension CustomViewOne: CustomViewProtocol {
func doSomething(){
//add custom logic
}
func doSomethingElse(with this: String)
//add custom logic
}
class CustomViewTwo: UIView{
}
extension CustomViewTwo: CustomViewProtocol {
func doSomething(){
//add custom logic
}
func doSomethingElse(with this: String)
//add custom logic
}