Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 访问静态变量并在类外设置它_Ios_Swift_Static Variables - Fatal编程技术网

Ios 访问静态变量并在类外设置它

Ios 访问静态变量并在类外设置它,ios,swift,static-variables,Ios,Swift,Static Variables,这是一个自定义字段类 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 SOMETHI

这是一个自定义字段类

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
  }

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

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

Class Custom: CustomViewController {
     SubtitleCustomField.CellIdentifier = "part1_subtitle"
}
我现在面临一个问题。在CustomField类中,如果CellIdentifier==“A”说

静态成员“CellIdentifier”不能用于类型的实例 “自定义字段”


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

错误消息试图告诉您,您正在引用类型属性(静态属性),就好像它是实例属性一样。您需要在SubtitleCustomField初始值设定项中的“CellIdentifier”前面加上“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
  }

  }
}
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) 否。初始化仅在您第一次尝试获取变量值时执行。之后,你可以将其设置为任何你想要的。如果在获取变量之前设置了该变量,则不会执行延迟初始化。太棒了。非常感谢你,马克!