Swift 使用变量的值进行属性查找

Swift 使用变量的值进行属性查找,swift,properties,Swift,Properties,我试图在代码中构建当前语言环境属性的表,在尝试将变量的值传递给函数时遇到问题: let currentLocale = Locale(identifier: "en_US") let calendar1 = currentLocale.calendar // "gregorian (fixed)" let propertyName = "calendar" let calendar2 = currentLocale.propertyName // Error: Value of t

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

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(“日历”)的值传递给Locale实例?我知道在其他语言中,可以在变量名前面加上“$propertyName”,这会告诉它读取变量的值


如果可能的话,我想保持这种纯粹的快捷方式。

您正在寻找某种形式的

这有点棘手,因为这是Cocoa的纯Objective-C特性,所以它不适用于Swift overlay类Locale;您必须将
currentLocale
转换为Objective-C NSLocale。此外,NSLocale通过特殊的NSLocale.Key类型公开其属性。经过大量的铸造,我发现这是有效的:

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

calendar2
是按任意方式键入的,但您可以将其转换为字符串。

您正在寻找某种形式的日历

这有点棘手,因为这是Cocoa的纯Objective-C特性,所以它不适用于Swift overlay类Locale;您必须将
currentLocale
转换为Objective-C NSLocale。此外,NSLocale通过特殊的NSLocale.Key类型公开其属性。经过大量的铸造,我发现这是有效的:

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

calendar2
键入为Any,但您可以将其转换为字符串。

对象(forKey:)
NSLocale
上的方法需要有效的NSLocale组件键,而“calendar”不是。你是说
valueForKey(:)
?是的@Matt,当我把那行代码插入代码时,我得到了一个错误:“Locale”类型的值没有成员“object”。是的,我让它工作了,但这并不容易!这是一个比我预想的有趣得多的挑战。@Matt,这是可行的,但我必须承认这并不是我预想的。非常感谢你给了我一个有效的答案!由于Swift可以推断出
NSLocale.Key
类型的
forKey:
参数,因此也可以将其编写为
.object(forKey:.init(rawValue:propertyName))
——尽管这可能会牺牲简洁性。
对象(forKey:)
,但
NSLocale
上的方法需要有效的NSLocale组件键,哪个“日历”不是。你是说
valueForKey(:)
?是的@Matt,当我把那行代码插入代码时,我得到了一个错误:“Locale”类型的值没有成员“object”。是的,我让它工作了,但这并不容易!这是一个比我预想的有趣得多的挑战。@Matt,这是可行的,但我必须承认这并不是我预想的。非常感谢你给了我一个有效的答案!因为Swift可以推断出
forKey:
参数的
NSLocale.Key
类型,所以您也可以将其编写为
.object(forKey:.init(rawValue:propertyName))
——尽管这可能会牺牲简洁性。您没有使用参数调用函数,也没有使用参数调用函数。