如何在swift中执行像UITableViewDataSource这样的自定义委托方法?

问题描述:

我有一个UIButton在一个UIViewController。我使用自定义委托来打印文本。现在,问题是委托方法在理想的不执行时viewDidAppear(animated)(即,像UITableViewDataSource如何在swift中执行像UITableViewDataSource这样的自定义委托方法?

协议:

protocol FruitDelegate{ 

    func fruit(_ name:String,taste:String)->Bool 
} 

水果类

class Fruit{ 

    var delegate:FruitDelegate? 

    var name:String! 
    var taste:String! 

    init(name:String,taste:String){ 
     self.name = name 
     self.taste = taste 

    } 

    func isTrue(){ 

     if self.delegate?.fruit(name, taste: taste) == true{ 

      print("Answer Correct") 
     }else{ 

      print("Answer Wrong") 
     } 
    } 

} 

视图控制器:

class ViewController: UIViewController,FruitDelegate { 


    @IBOutlet var textLabel: UILabel! 

    let fruit = Fruit(name: "mango", taste: "sweet") 


    override func viewDidLoad() { 
     super.viewDidLoad() 

     self.fruit.delegate = self 
    } 

    func fruit(_ name: String, taste: String) -> Bool { 

     if name == "mango" && taste == "sweet"{ 

      return true 
     }else{ 
      return false 
     } 
    } 


    @IBAction func actionRefreshButton(_ sender: UIButton) { 

     self.fruit.isTrue() 
    } 


} 

我知道下面的代码会给我我的问题的确切解决方案。

override func viewDidLoad() { 
    super.viewDidLoad() 

    self.fruit.delegate = self 
    self.fruit.isTrue() 
} 

但是,是否有必要呼吁self.fruit.isTrue()viewController方法呢? (高达viewDidAppear)。在UITableView中,当出现查看时,不需要呼叫reloadData()。同样的方法,我需要执行FruitDelegate方法。我该怎么办?

+1

使用didSet为代表的变量? – koropok

+0

@koropok,谢谢兄弟我会试试它并让你知道 –

+0

@koropok,你是对的。非常感谢你。 –

你只需要在你的果类,也许调用isTrue方法在您的代理变种didSet

class Fruit{ 

    var delegate:FruitDelegate{ 
     didSet{ 
      self.isTrue() 
     } 
    } 

    var name:String! 
    var taste:String! 

    init(name:String,taste:String){ 
     self.name = name 
     self.taste = taste 

    } 

    func isTrue(){ 

     if self.delegate?.fruit(name, taste: taste) == true{ 

      print("Answer Correct") 
     }else{ 

      print("Answer Wrong") 
     } 
    } 

} 
+1

准确答案:)谢谢兄弟:) –