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