使用变量值进行属性查找

时间:2016-09-06 19:33:11

标签: swift properties

我正在尝试在代码中构建一个当前语言环境属性的表,并且在尝试将变量的值传递给函数时遇到了问题:

let currentLocale = Locale(identifier: "en_US")

let calendar1 = currentLocale.calendar      // "gregorian (fixed)"

let propertyName = "calendar"
let calendar2 = currentLocale.propertyName // Error: Value of type 'Locale' has no member 'porpertyName'

在上面的最后一行代码中,Locale的实例认为我正在传递它" propertyName"而不是变量" calendar"。

的内容

有没有办法将propertyName(" calendar")的值传递给Locale实例?我知道在其他语言中,您可以在变量名前添加' $ propertyName',并告诉它读取变量的值。

如果可能,我想保留这个纯粹的Swift。

1 个答案:

答案 0 :(得分:3)

您正在寻找某种形式的 key-value coding

这有点棘手,因为这是Cocoa的纯粹Objective-C功能,因此它不适用于Swift覆盖类Locale;您必须将currentLocale强制转换为Objective-C NSLocale。此外,NSLocale通过特殊的NSLocale.Key类型公开其属性。经过大量的演员,我发现这有效:

let calendar2 = 
    (currentLocale as NSLocale).object(forKey:NSLocale.Key(rawValue:propertyName))

calendar2输入为Any,但您可以将其强制转换为String。