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