我已经有几个字符串数组了。我想将它们添加到数组列表中,因此我可以使用预定义(枚举)索引。各个数组已经就位,我只需要通过索引访问它们(用枚举修复或在带枚举类型的索引的循环中)。所以在数组中不应该有字符串的副本,只有对数组本身的引用。
我已经考虑到了这一点:
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吗? 有什么想法吗?
答案 0 :(得分:1)
字典可以很好地解决这个问题:
var dict = [TypeOfArray:[String]]()
dict[TypeOfArray.Src] = srcFolders
答案 1 :(得分:1)
如果您想要共享阵列的内容,您希望更新能够反映在您的代码中,您可以使用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"]