【问题标题】:Static member cannot be used on instance of type静态成员不能用于类型的实例
【发布时间】:2016-06-24 07:33:17
【问题描述】:

我正在尝试创建一个访问单例的方法。我收到此错误(请参阅下面的代码)。我不明白为什么会收到此错误以及此错误的含义。谁能解释一下?

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
  static private var thedelegate: AppDelegate?

  class var delegate : AppDelegate {
    return thedelegate!
  }

  func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    thedelegate = self // syntax error: Static member 'thedelegate' cannot be used on instance of type 'AppDelegate'

【问题讨论】:

  • AppDelegate.thedelegate = self
  • 这就是这个问题的解决方案,但是Sasha已经解释过了

标签: swift


【解决方案1】:

您需要在静态/类变量或函数前面加上声明它的类名,即使在同一个类中也是如此。

在这种情况下,你想return AppDelegate.thedelegate!

正如 Martin R. 指出的,AppDelegate.thedelegate = self

【讨论】:

  • 这似乎不一致,因为如果你做一个 let x = someStatic 它在类的全局范围内工作,不需要前缀。
  • @LegendLength 几种语言似乎很有意义。 swift 实际上比许多人做得更好(尽管这里有问题;))
【解决方案2】:

您正试图从该类的实例访问类级别变量。要使用它,您需要制作类级别的函数:静态函数()。试试这个:

static func sharedDelegate() -> AppDelegate {
    return UIApplication.sharedApplication().delegate as! AppDelegate
}

【讨论】:

  • “您正在尝试从实例访问类级别参数” - 为什么我不能这样做?
  • 嗯,我做到了,但它没有回答我的问题。它讨论了覆盖静态与类方法/属性。我不是要覆盖一个属性。我正在尝试从实例的方法中访问静态属性('thedelegate')。
  • @andrewz static 将变量与类关联,而不是类的实例。当你尝试时:thedelegate = self.编译器尝试访问 self.thedelegate。但它不存在,如果存在,可能会有许多不同的代表。静态指令正好相反,因此我们只能为整个类的该变量设置值。希望对您有所帮助。
  • 啊,所以我只是没有在类var前面加上类名,即AppDelegate.thedelegate = self。来自 C++ 会搞砸你的脑袋。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-25
  • 1970-01-01
  • 1970-01-01
  • 2018-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多