【问题标题】:Accessing a static variable and setting it outside the class访问静态变量并将其设置在类之外
【发布时间】:2015-12-30 19:19:15
【问题描述】:

这是一个 SubtitleCustomField 类。

Class SubtitleCustomField: CustomCellField {
static var CellIdentifier: String!

  override init(frame: CGRect) {
  super.init(frame: frame)
  if CellIdentifier == "A" {
   //DO SOMETHINIG
  } else if CellIdentifier == "B" {
  //DO SOMETHING
  }

  }
}

在SubtitleCustomField类之外,我基本上需要访问静态变量CellIdentifier,设置值如“A”,并触发if语句运行。

在另一个类 Custom 类中,我确认可以通过以下方式访问静态变量 CellIdentifier:

Class Custom: CustomViewController {
     SubtitleCustomField.CellIdentifier = "part1_subtitle"
}

此时我面临一个问题。在 SubtitleCustomField 类中,我在 if CellIdentifier == "A" 上收到错误提示

静态成员“CellIdentifier”不能用于类型实例 'SubtitleCustomField'

我可以用来实现我想要的最佳方法是什么?总之,我想在 SubtitleCustomField 之外设置 CellIdentifier 变量,并使用我在 SubtitleCustomField 类中设置的值触发 if 语句。

【问题讨论】:

    标签: ios swift static-variables


    【解决方案1】:

    错误消息试图告诉您您正在引用类型属性(静态属性),就好像它是一个实例属性一样。您需要在 SubtitleCustomField 初始化程序中为“CellIdentifier”加上“SubtitleCustomField”,就像在其他地方引用它时一样。

    override init(frame: CGRect) {
        super.init(frame: frame)
        if SubtitleCustomField.CellIdentifier == "A" {
            //DO SOMETHINIG
        } else if SubtitleCustomField.CellIdentifier == "B" {
            //DO SOMETHING
        }
    }
    

    您应该始终使用类型名称后跟“.”来引用类型属性。后跟属性名称。

    【讨论】:

    • 我还有其他问题。 (1) 我需要这样做,因为它是一个静态变量,对吧? (2) 我读过一些关于静态变量的信息,有点困惑。在文档中,它说静态变量被延迟实例化并设置一次值,该值可以在类的所有实例中使用。如果我根据我的情况不断更改 CellIdentifier 的值,会不会导致任何问题??
    • (1) 是的。这个想法是静态变量是一种类型的属性,因此您可以使用点符号访问它,就好像它是类型本身的属性而不是实例的属性一样。 (2) 不可以。初始化只在您第一次尝试获取变量的值时执行。之后,您可以将其设置为您想要的任何内容。如果在获取变量之前设置了变量,则不会进行延迟初始化。
    • 太棒了。非常感谢马克!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-13
    • 1970-01-01
    • 1970-01-01
    • 2010-10-19
    • 1970-01-01
    相关资源
    最近更新 更多