2017-08-17 9 views
1

私はUIViewControllerUIButtonを持っています。私はカスタムデリゲートを使用してテキストを印刷しています。さて、問題はviewDidAppear(animated)理想的に実行されない方法を委任している(すなわち、UITableViewDataSourceなど)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() 
} 

しかし、それはviewController方法にself.fruit.isTrue()を呼び出すために必要ですか? (viewDidAppearまで)。 UITableViewでは、ビューが表示されるときにはreloadData()に電話する必要はありません。同じように、私はFruitDelegateメソッドを実行する必要があります。私はどうやって?

+1

使用didSetにisTrueメソッドを呼び出す必要がありますか? – koropok

+0

@koropok、ありがとう。私はそれを試してみよう。 –

+0

@koropok、あなたは正しい。どうもありがとう。 –

答えて

2

はあなただけ多分あなたのフルーツクラスでデリゲート変数のためのあなたのデリゲートVARの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

正確な答え:)ありがとうbro :) –

関連する問題