从另一个类读取数组

时间:2018-09-27 21:32:53

标签: arrays swift

我在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数组?我认为这还不是全球性的。

2 个答案:

答案 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"