Swift:如何定义一个灵活字符串数组的固定数组



我已经有了几个字符串数组。我想将它们添加到数组列表中,因此可以使用预定义的(enum)索引。各个数组已经到位,我只需要通过索引访问它们(用enum固定或在循环中使用enum类型的索引)。因此,数组中不应该有字符串的副本,只有对数组本身的引用。

我已经记在心里了:

enum TypeOfArray: Int {
        case Src = 0, Dest, SrcCache, DstCache, N
    }
    var srcFolders : [String] = [] 
    var dstFolders : [String] = []
    var srcFoldersCache : [String] = [] 
    var dstFoldersCache : [String] = []
    var allFolders: [[String]] = []

然后我想通过分配每个单独的数组来初始化主数组。但这被编译器拒绝了:("不能将'[[String]]'类型的值下标为'TypeArray'")

allFolders[TypeOfArray.Src] = srcFolders

我不知道这个" typeave "索引是否可能。我可以使用固定的索引范围0..N在定义优化内存或速度时?什么好主意吗?

字典将是一个很好的解决方案:

var dict = [TypeOfArray:[String]]()
dict[TypeOfArray.Src] = srcFolders

单元素

如果你想要共享数组的内容,并且你想要更新在你的代码中反映出来,你可以使用Singleton

final class ImageNameManager {
    static let sharedInstance = ImageNameManager()
    var srcFolders: [String]
    var dstFolders: [String]
    var srcFoldersCache: [String]
    var dstFoldersCache: [String]
    private init() {
        // populate: srcFolders, dstFolders, srcFoldersCache, dstFoldersCache
        srcFolders = []
        dstFolders = []
        srcFoldersCache = []
        dstFoldersCache = []
    }
    enum ImageType: Int {
        case Src = 0, Dest, SrcCache, DstCache
    }
    func imageNames(imageType: ImageType) -> [String] {
        switch imageType {
        case .Src: return srcFolders
        case .Dest: return dstFolders
        case .SrcCache: return srcFoldersCache
        case .DstCache: return dstFoldersCache
        }
    }
}
使用

现在可以填充数组

ImageNameManager.sharedInstance.dstFolders.append("Hello")

并在代码的另一部分

中接收新数据
let dstFolders = ImageNameManager.sharedInstance.imageNames(.Dest)
// ["Hello"]

更新

为了在你的应用程序中共享相同的数组,你也可以使用下面的代码

final class ImageNameManager {
    static let sharedInstance = ImageNameManager()
    var srcFolders: [String] = []
    var dstFolders: [String] = []
    var srcFoldersCache: [String] = []
    var dstFoldersCache: [String] = []
}

现在总是引用这个数组代码ImageNameManager.sharedInstance.dstFolders,看

ImageNameManager.sharedInstance.dstFolders.append("Hello")
ImageNameManager.sharedInstance.dstFolders.append("World")
ImageNameManager.sharedInstance.dstFolders // ["Hello", "World"]

相关内容

  • 没有找到相关文章

最新更新