Функция вызова из другого класса swift
Мне не удалось вызвать функцию в моем GameViewController.swift из другого класса, Menu.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.showLeaderboard()
"Отсутствует аргумент для параметра №1 при вызове". Но я не понимаю, какой тип аргумента ожидает компилятор, потому что я объявил функцию без каких-либо параметров.
Спасибо
Ответы
Ответ 1
В GameViewController
вы определили scoreAction
как instance
метод, а не функцию class
. Вы должны вызвать scoreAction
, создав экземпляр GameViewController
class Menu: SKnode {
func scoreAction(sender:UIButton!) {
self.buttonPlay.removeFromSuperview()
self.buttonScore.removeFromSuperview()
// CALLING FUNCTION
//see () on GameViewController
GameViewController().showLeaderboard()
}
}
Я думаю, вы должны загрузить GameViewController
из storyBoard, если у вас есть GameViewController
в storyBoard
Ответ 2
Если вы хотите выполнить какой-либо метод для действия в другом классе, вы должны использовать протокол.
//вне 1-го класса
protocol abc {
func xyz()
}
//Внутри 1-го класса
var delegate: abc?
//Внутри 1-го класса на действии
self.delegate.xyz()
//Внутри второго класса вы хотите выполнить метод
extension 2nd: abc {
func xyz(){
//code
}
}
//Внутри 2-го класса, где выполняется экземпляр процесса
let obj = 2nd initialiser
obj.delegate = self
Надеюсь это поможет.