Xcode 从另一个类调用函数

Xcode 从另一个类调用函数,xcode,swift,Xcode,Swift,从另一个类Menu.swift调用GameViewController.swift中的函数时遇到问题。 我这样调用函数: class Menu: SKnode { func scoreAction(sender:UIButton!) { self.buttonPlay.removeFromSuperview() self.buttonScore.removeFromSuperview() // CALLING FUNCTION

从另一个类Menu.swift调用GameViewController.swift中的函数时遇到问题。 我这样调用函数:

class Menu: SKnode {

    func scoreAction(sender:UIButton!) { 
        self.buttonPlay.removeFromSuperview()
        self.buttonScore.removeFromSuperview()
         // CALLING FUNCTION
        GameViewController.showLeaderboard()    
     }
}
下面是我试图调用的函数:

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)
    }
}

我在GameViewController.ShowLeadboard()行的菜单类中有一个编译器错误 “调用中缺少参数#1的参数”,但我不理解编译器所期望的参数类型,因为我声明函数时不需要任何参数


谢谢

GameViewController
中,您已经将
scoreAction
定义为
实例
方法,而不是
函数。您应该通过创建
GameViewController的实例来调用
scoreAction

class Menu: SKnode {

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

我认为您应该从故事板加载
GameViewController
,如果您在故事板中有
GameViewController
,如果您想在另一个类中执行任何操作方法,您必须使用协议

//头等舱外

protocol abc {
     func xyz()
}
var delegate: abc?
//头等舱内

protocol abc {
     func xyz()
}
var delegate: abc?
//第一节课内的行动

self.delegate.xyz()
//在第二类中,您要执行方法

extension 2nd: abc {
    func xyz(){
      //code 
   }
}
//在执行实例化过程的第二类内部

let obj = 2nd initialiser
obj.delegate = self

// if you want to use this scenario with table view cell in cellForRowAt
guard let cell = tableView.dequeueReusableCell(withIdentifier: "TableViewCell", for: indexPath) as? TableViewCell else { return UITableViewCell() }
cell.delegate = self

希望这有帮助。

您试图像调用类方法一样调用showLeaderboard,但它是一个实例方法。你需要实例化GameViewController的一个实例,然后你可以调用ShowLeadboard。你能解释一下
let obj=2nd initialiser
中的
2nd initialiser是什么吗?let obj=2nd initialiser这里obj是2nd initialiser的对象,比如:-let cell=?*(tableView.dequeueReusableCell(带标识符:“TVCselectProfessionalForConsulting”)作为?TVCselectProfessionalForConsulting)@ClassA