我正在尝试在代码中构建一个当前语言环境属性的表,并且在尝试将变量的值传递给函数时遇到了问题:
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。
答案 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。