【问题标题】:Get the value of a Swift variable from a constructed name从构造的名称中获取 Swift 变量的值
【发布时间】:2017-08-28 21:34:02
【问题描述】:

我遇到了一个我试图在 Swift 4 中解决的问题。

假设,我有以下变量

let var1 = "One"
let var2 = "Two"
let var3 = "Three"

var counter = 1

// Loop Start

let currentVariable = "var" + "\(counter)"

//Fetch the value of variable stored under currentVariable

counter += 1

//Loop end

我正在尝试根据存储在currentVariable 下的变量名获取值。

【问题讨论】:

标签: swift variables reflection swift4


【解决方案1】:

您可以设置字典,用键替换变量名。

let letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
var myDictionary:[String:String] = ["var1":"One", "var2":"Two", "varA":"A", "varB":"B"]  // note, both sides can be different types than String

for x in 0...9 {
    let myKey = "var" + String(x)
    printValue(myKey)
}
for x in letters.characters {
    let myKey = "var" + String(x)
    printValue(myKey)
}

简单的功能:

func printValue(_ key:String) {
    let myValue = myDictionary[key]
    if myValue != nil {
        print(myValue)
    }
}

我很确定你可以让事情变得更优雅,但你明白了。另外,请记住,字典是“无序的”,而不是数组。

【讨论】:

  • 是的。这似乎更像是解决方案。我会更多地理解它并解决我的问题。再次感谢。
  • 我想补充一点,在几乎所有情况下,使用字典、映射、哈希表等比尝试通过字符串名称动态访问变量更好,但不仅仅是在 swift 中,在 php 和其他。为什么?安全性和结构。
  • 我从没想过。我来自 1980 年代初期的汇编程序/COBOL,并且忘记这方面的事情。很棒的补充!
【解决方案2】:

使用数组

let myArray = ["one", "two", "three"];
var counter = 1;
print(myArray[counter]);

【讨论】:

  • 谢谢。有没有没有数组的方法?我的主要目的是看看如何从派生变量名称中获取值
  • 无论如何你都不想这样做。如果 swift 有这样的操作,它会更慢/更不安全。这与我们在 PHP 中避免使用可变变量的原因相同。
  • 如果你想使用命名元素访问,我鼓励你使用任何 Swift 的地图类。
  • 感谢@TheUnholyProgrammer,我会尝试使用数组来实现。
  • 是的字典似乎是一个更好的解决方案。
猜你喜欢
  • 2016-12-18
  • 2014-02-08
  • 1970-01-01
  • 1970-01-01
  • 2013-06-04
  • 1970-01-01
  • 2017-09-23
  • 1970-01-01
  • 2019-11-30
相关资源
最近更新 更多