Arrays 使用变量内容作为数组名称
在swift 3.0中,我希望连接字符串(string1和string2),并使用结果字符串(string3)作为我要访问的数组的名称Arrays 使用变量内容作为数组名称,arrays,swift,Arrays,Swift,在swift 3.0中,我希望连接字符串(string1和string2),并使用结果字符串(string3)作为我要访问的数组的名称 let fruitsArray = ["apple", "orange", "banana"] let appleArray = ["red", "green", "yellow"] let string1 = "apple" let string2 = "Array" let string3 = string1 + string2 let string4
let fruitsArray = ["apple", "orange", "banana"]
let appleArray = ["red", "green", "yellow"]
let string1 = "apple"
let string2 = "Array"
let string3 = string1 + string2
let string4 = string3[1]
当然,有一条错误消息“下标不可用…”
做这件事的正确方法是什么?非常感谢大家。通过某种形式的内省,你可以得到你想要的,但这是一种糟糕的做法,而且非常笨拙。你应该重新设计你的数据,例如,使用字典:
let data = [
"fruitsArray" : ["apple", "orange", "banana"],
"appleArray": ["red", "green", "yellow"]
]
let string1 = "apple"
let string2 = "Array"
let string3 = string1 + string2
if let array = data[string3] {
let string4 = array[1]
print(string4)
} else {
print("Key not found")
}
AS,您可能需要考虑重新建模数据,因为这种类型的运行时属性访问不是非常“快速”。 但是,如果您只对为了调试而读取数据感兴趣,那么可以利用该结构对拥有数组属性的数据类型执行运行时自省
例如:当然,您可以将此方法应用于非调试目的,但我不推荐使用。是的,我理解此方法,谢谢。但是有没有一种方法可以在不使用字典的情况下执行此操作?任何其他方法都要求您在类或结构中包装
futurarray
和applarray
。如果您的包装类继承自> NSObjult,你可以使用。如果你想要一个纯SWIFT解决方案,看看OK。非常感谢。如果你愿意的话,考虑反馈我提供的答案。
struct Foo {
let fruitsArray = ["apple", "orange", "banana"]
let appleArray = ["red", "green", "yellow"]
}
func attemptToReadStringArrayProperty(_ name: String, fromFoo foo: Foo) -> [String]? {
return Mirror(reflecting: foo).children
.flatMap { ($0 ?? name + ".") == name ? ($1 as? [String]) : nil }.first
}
/* example usage/debugging */
let string1 = "apple"
let string2 = "Array"
let string3 = string1 + string2
let foo = Foo()
if let strArr = attemptToReadStringArrayProperty(string3, fromFoo: foo) {
strArr.forEach { print($0) }
} /* red
green
yellow */