【问题标题】:Calling function inside function in another function在另一个函数中调用函数内部的函数
【发布时间】:2019-09-11 12:14:22
【问题描述】:

我是iOS Programming 的新手,遇到了这个问题。假设我有这两个功能:

class BaseViewController: UIViewController, ErrorMessageDelegate {
    var uiView =  UIView();
    var viewErrorMessage:ErrorMessage!

    func refresh(_sender: AnyObject) {
        print("testing")
    }

    func getErrorMessage(message:String) {
        super.viewDidLoad()
        Dialog.dismiss()
        ErrorMessage.message = message
        viewErrorMessage = Bundle.main.loadNibNamed("ErrorMessage", owner: self, options: nil)?.first as! ErrorMessage
        viewErrorMessage.delegate = self
        self.view.addSubview(viewErrorMessage)

        func removeSubView() {
            viewErrorMessage.removeFromSuperview()
        }
    }
}

我想在函数 refresh 中调用函数 removeSubView。我必须这样做,因为我需要将 refresh 函数覆盖到我的子类。我需要将函数 removeSubView 放在 getErrorMessage 中,因为我应该这样做。有谁知道这是怎么做到的吗?

【问题讨论】:

  • 你试过在getErrorMessage方法外写方法吗?
  • 这不仅仅是 Swift。这是因为您无权访问其他范围。我建议将removeSubView() 移动到BaseViewController() 内的可访问范围内,您可以将其设为私有以防止其他人调用它。

标签: ios swift


【解决方案1】:

请参考以下代码。它将帮助您解决问题。

代码:

class BaseViewController: UIViewController, ErrorMessageDelegate {
    var uiView =  UIView();
    var viewErrorMessage:ErrorMessage!

    func refresh(_sender: AnyObject) {
        removeSubView()
    }

    func getErrorMessage(message:String) {
        super.viewDidLoad()
        Dialog.dismiss()
        ErrorMessage.message = message
        viewErrorMessage = Bundle.main.loadNibNamed("ErrorMessage", owner: self, options: nil)?.first as! ErrorMessage
        viewErrorMessage.delegate = self
        self.view.addSubview(viewErrorMessage)
    }
    func removeSubView() {
        viewErrorMessage.removeFromSuperview()
    }
}

【讨论】:

    【解决方案2】:

    是的,这是可能的

    func a() {
        c()
    }
    
    func b() {
        c()
    }
    
    func c() {
        print("hello world")
    }
    

    【讨论】:

      【解决方案3】:

      不,这是不可能的——但我想知道你为什么要这样做?

      【讨论】:

      • removeSubview() 和 getErrorMessage() 有什么关系?没有。所以没有理由让它在 getErrorMessage 的范围内
      • viewErrorMessage 必须在 getErrorMessage 中调用,因为它已添加到那里
      • @FirdaSahidi 把它移开
      猜你喜欢
      • 2017-09-22
      • 1970-01-01
      • 2017-05-08
      • 2018-06-12
      • 1970-01-01
      • 2011-05-30
      • 1970-01-01
      • 1970-01-01
      • 2016-01-04
      相关资源
      最近更新 更多