【问题标题】: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 ,可以帮助您入门。

        【讨论】:

          猜你喜欢
          • 2011-12-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-09-24
          • 2014-07-31
          • 1970-01-01
          • 1970-01-01
          • 2014-08-12
          相关资源
          最近更新 更多