在Swift中创建一个具有动态名称的变量。

14
在Swift中,我想通过一个由迭代的索引值管理的循环来创建一个变量,该变量的变量名是“person_”和当前循环索引的连接。
因此,我的循环最终会创建变量,如下所示:
var person_0 = ...
var person_1 = ...
var person_2 = ...
etc...

我在网上搜索没有找到相关内容,所以来这里发布。

谢谢!


6
这是不好的做法。可能有更好的解决方案来实现你想要做的事情。如果您提供更多的背景信息,我可能能够帮助您。 - David
4个回答

4

一种解决方案是将所有变量存储在数组中。您存储在该数组中的变量的索引将对应于您尝试包含在变量名称中的索引值。

在您的视图控制器顶部创建一个实例变量:

var people = [WhateverTypePersonIs]()

然后创建一个循环,以将您想要的任何数量的人员存储在该实例变量中:

for var i = 0; i < someVariable; i++ {
    let person = // someValue of type WhateverTypePersonIs
    people.append(person)
}

如果你需要获取“person_2”的内容,以解决你的问题,你可以使用people[2]来访问该人员。这是与你尝试解决问题的方式相同的方法。

3
在Swift中,无法创建动态变量名。您尝试实现的是Array的典型用例。
创建一个Array并用您的个人数据填充它。稍后,您可以通过其索引访问这些人:
var persons: [String] = []

// fill the array
for i in 0..<10 {
    persons.append("Person \(i)")
}

// access person with index 3 (indexes start with 0 so this is the 4th person)
println(persons[3])  // prints "Person 3"

1
对于 UI 元素,您不能使用数组方法。 - Soheil Novinfard

1

让变量name等于"person_\(index)"。

然后将name添加到在循环之前声明的可变数组中。

类似这样的操作?


0

你想在Swift中做的事情是不可能的。变量名仅供人类使用(尤其是在编译语言中),这意味着它们在编译阶段被剥离。

但是,如果你真的非常想这样做,代码生成工具是解决问题的方法。找到一个合适的代码生成工具,在构建阶段运行它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接