我在Theme.swift上有一个名为Themes文件的类,该类基本上定义了一些字符串类型,并设置了不同的颜色和字体类型。
在另一个名为Contents.swift的文件上,我还有另一个名为Contents的类以及一些数组,如下所示:
class Contents: Themes {
let navContent = [
LabelContent(text: "NAV IDENT", theme: .menuOption),
LabelContent(text: "WPT LIST", theme: .menuOption)
]
}
问题是: 如何在AppDelegate中使用此navContent数组?我认为这还不是全球性的。
答案 0 :(得分:0)
如果您不想创建类Contents
的实例然后获取其属性,则将这些属性设为静态(或Type Properties):
class Contents: Themes {
static let navContent = [
LabelContent(text: "NAV IDENT", theme: .menuOption),
LabelContent(text: "WPT LIST", theme: .menuOption)
]
}
您可以这样访问它们:
print(Contents.navContent[0])
这是文档中类型属性的简要说明:
您可以定义属于类型本身的属性,而不是属于该类型的任何实例的属性。无论您创建了多少个该类型的实例,这些属性将永远只有一个副本。这些属性称为类型属性。
答案 1 :(得分:0)
如果它是Contents类的成员变量,则需要创建Contents实例,然后从该实例访问它。
let instance = Contents()
instance.navContent // access it this way
如果您不想在每次需要访问它时都创建一个实例,则可以将其设置为静态类变量
class Contents: Themes {
static let navContent = [
LabelContent(text: "NAV IDENT", theme: .menuOption),
LabelContent(text: "WPT LIST", theme: .menuOption)
]
}
Contents.navContent // access it this way
如果您需要该变量的多态性,则可以在变量上使用'class'关键字,并可以在子类上覆盖它(但它必须是一个计算变量)。您可以使用与静态类变量相同的方式访问它
class Contents: Themes {
class var navContent: [LabelContent] {
return [LabelContent(text: "NAV IDENT", theme: .menuOption)]
}
}
class OtherContents: Contents {
override class var navContent: [LabelContent] {
return [LabelContent(text: "WPT LIST", theme: .menuOption)]
}
}
Contents.navContent // access "NAV IDENT"
OtherContents.navContent // access "WPT LIST"