【问题标题】: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! MyView1view 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
      } 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-04-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多