2017-08-17 46 views
1

我有一個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,你是對的。非常感謝你。 –

回答

2

你只需要在你的果類,也許調用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

準確答案:)謝謝兄弟:) –

相關問題