【问题标题】:What is the equivalent of Java Object in Swift?Swift 中的 Java 对象等价物是什么?
【发布时间】:2016-06-23 04:17:22
【问题描述】:
我是 Swift 的菜鸟。我想将 GameViewController 或 GameScene 的实例传递给 HelperClass,如下所示。在java中我可以使用Object。这是如何在 Swift 中完成的?
func getHighscores(leaderboardID: String, caller: **whatTypeHere**) {
...
}
所以基本上我想在我从 GameCenter 获得高分时通知正确的调用者。
【问题讨论】:
标签:
java
swift
casting
sprite-kit
【解决方案1】:
据我了解,您希望“呼叫者”是您想要的任何类型。
在这种情况下,您需要在此处使用“AnyObject”类型。
Documentation
【解决方案2】:
AnyObject 是 Swift 中“可以是任何东西”的类型。您可能真正想要的是定义一个 GameViewController 和 GameScene 都实现的协议:
protocol HighScoreReceiver {
func gotNewScores(scores:[Int])
}
class GameViewController: UIViewController, HighScoreReceiver {
func gotNewScores(scores: [Int]) {
// do something here
}
}
class GameScene: HighScoreReceiver {
func gotNewScores(scores: [Int]) {
// do something here
}
}
class Helper {
func getHighscores(leaderboardID: String, caller: HighScoreReceiver) {
//get the scores, then...
caller.gotNewScores(scores)
}
}
【解决方案3】:
如果您想传递该类的实例,您可以这样做。当然,所有类都是对象,UIViewControllers 也不例外。
func getHighscores(leaderboardID: String, caller: GameViewController) {
// call some method in caller like 'caller.refreshHighScore()'
}
如果您想从 GameViewController 类中调用该方法,您可以这样做:
getHighscores("str", caller: self)
如果你需要“通知”某个类的东西,你可以使用 NSNotificationCenter。这是一个 resource ,可以帮助您入门。