在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 = string3[1]
当然有错误信息"下标不可用...) 这样做的正确方法是什么?非常感谢大家。
答案 0 :(得分:0)
你想要什么是可能的使用某种形式的内省,但它是一个不好的做法,无论如何非常笨拙。您应该重新构建数据,例如,使用词典:
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")
}
答案 1 :(得分:0)
作为@CodeDifferent writes in his/her answer,您可能需要考虑重新构建数据,因为这种类型的运行时属性访问不是很快" Swifty"。
但是,如果您只是为了调试而只读取数据,那么您可以利用Mirror
结构对拥有数组属性的数据类型执行运行时内省。
E.g:
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 */
当然,你可以将这种方法用于非调试目的,但我不推荐它。