我已经有了几个字符串数组。我想将它们添加到数组列表中,因此可以使用预定义的(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"]