Swift:如何定义灵活String数组的固定数组

时间:2016-08-31 08:03:32

标签: arrays swift multidimensional-array indexing enums

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

我已经考虑到了这一点:

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]] = []

然后我想通过分配每个单独的数组来初始化主数组。但是编译器拒绝了这一点:(“不能使用'TypeArray'类型的索引下标类型'[[String]]'的值”)

allFolders[TypeOfArray.Src] = srcFolders

我不知道这个“typesave”索引是否可行。 在定义优化内存或速度时,我可以使用固定索引范围0..N吗? 有什么想法吗?

2 个答案:

答案 0 :(得分:1)

字典可以很好地解决这个问题:

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

答案 1 :(得分:1)

的Singleton

如果您想要共享阵列的内容,您希望更新能够反映在您的代码中,您可以使用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"]