获取Swift类的属性名称作为字符串

4

如何将属性名作为字符串获取?

class Person {
    var firstName: String
    var lastName: String
    var downloading: Bool

    func excludePropertiesFromCloud() -> [String] {
        return //here I want to return ["downloading"]
    }
}

我希望能够避免在变量名称更改后输入return ["downloading"]以防止出错。
要获取类名,您可以使用String(describing: Person.self),因此我正在寻找类似于属性的内容。
注意:
虽然问题的标题与Get a Swift Variable's Actual Name as String非常相似,但很明显原问题的接受答案返回的是属性的值,并没有回答这个简单的问题。原问题是任何谷歌搜索中出现的第一个“Swift get property name”,而该答案回答了其他问题,正如@MarqueIV所指出的那样。这就是为什么我创建了这个问题。

https://dev59.com/a43da4cB1Zd3GeqP3Kow#33516339 - Vyacheslav
1
抱歉,尽管问题的标题非常相似,但很明显原始问题的接受答案并没有回答这个简单的问题。原始问题是在任何使用“Swift属性名称”进行谷歌搜索时首先出现的问题,而所提供的答案则回答了其他问题,正如@MarqueIV所指出的那样。这就是我创建这个问题的原因。 - Duzmac
1个回答

4
如果你愿意将你的属性标记为@objc,你可以这样获取属性名称:
class Person {
    @objc var firstName: String
    var lastName: String
    var downloading: Bool

    func excludePropertiesFromCloud() -> [String] {
        return [#keyPath(firstName)]
    }
}

3
这如何解决问题?如果您重命名属性,则需要更新keyPath。 - rmaddy
4
我们正在直接通过属性名称访问该属性。如果由于某种原因我们更改了属性名称,那么将会在编译时出现错误。 - gasho
我正在使用Core Data和菜单*Editor / Create NSManagedObject Subclass...*。每次代码重新生成时,@objc都会被不幸地覆盖。 - Duzmac

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