从另一个类swift调用函数

Ema*_*rdo 35 xcode swift

我无法从另一个类Menu.swift调用我的GameViewController.swift中的函数.我把这个函数称为:

class Menu: SKnode {

    func scoreAction(sender:UIButton!) { 
        self.buttonPlay.removeFromSuperview()
        self.buttonScore.removeFromSuperview()
         // CALLING FUNCTION
        GameViewController.showLeaderboard()    
     }
}
Run Code Online (Sandbox Code Playgroud)

这是我试图调用的函数:

class GameViewController: UIViewController,
 UITextFieldDelegate, GKGameCenterControllerDelegate  {

   func showLeaderboard()
    {
      var gcViewController: GKGameCenterViewController = GKGameCenterViewController()
      gcViewController.gameCenterDelegate = self

      gcViewController.viewState = GKGameCenterViewControllerState.Leaderboards
      gcViewController.leaderboardIdentifier = "yourleaderboardid"

      self.presentViewController(gcViewController, animated: true, completion: nil)
    }
Run Code Online (Sandbox Code Playgroud)

}

我的Menu类中的编译器错误在GameViewController.showLeaderboard()中"参数#1在调用中缺少参数"但我不明白编译器期望的参数类型,因为我声明了函数而没有任何需要参数.

谢谢

cod*_*ter 60

GameViewController你已经定义scoreActioninstance方法而不是class函数.你应该scoreAction通过制作实例来调用GameViewController

class Menu: SKnode {

    func scoreAction(sender:UIButton!) { 
        self.buttonPlay.removeFromSuperview()
        self.buttonScore.removeFromSuperview()
         // CALLING FUNCTION 
         //see () on GameViewController
        GameViewController().showLeaderboard()    
     }
}
Run Code Online (Sandbox Code Playgroud)

GameViewController如果你GameViewController在storyBoard中,我认为你应该从storyBoard 加载


Pra*_*tik 10

如果要在另一个类中执行任何操作方法,则必须使用协议.

//第一堂课以外

protocol abc {
     func xyz()
}
Run Code Online (Sandbox Code Playgroud)

//第一堂课

var delegate: abc?
Run Code Online (Sandbox Code Playgroud)

//在第一堂课上

self.delegate.xyz()
Run Code Online (Sandbox Code Playgroud)

//在第二课内你想要执行方法

extension 2nd: abc {
    func xyz(){
      //code 
   }
}
Run Code Online (Sandbox Code Playgroud)

//在执行实例化过程的第二个类中

let obj = 2nd initialiser
obj.delegate = self
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.

  • let obj = 第二个初始化程序 这里 obj 是第二个初始化程序的对象,例如:- let cell = ?*(tableView.dequeueReusableCell(withIdentifier: "TVCSelectProfessionalForConsultation") as? TVCSelectProfessionalForConsultation) @ClassA (2认同)