我從一個函式中得到一個欄位名。如何在點“。”之后插入該欄位名稱。
- 模型
struct User: Identifiable {
let username: String
let fullName: String
var description: String = ""
}
- 從標題中獲取欄位名稱
func get_field_name(key: String?) -> String {
var default_field = ""
guard let key = key else { return default_field }
let field: [String: String] = [
"Name" : "fullName",
"Username" : "username",
"Bio" : "description"
]
return field[key] ?? default_field
}
- 預計。
例如如果“item.title”是“Name”那么
let user: User
Text(item.title) //OK - Name
Text(user.get_field_name(key: item.title)) //OK - fullName
Text(user.???) //??? How to insert field name following "."
- 目的
我在下面的圖片中使用它

非常感謝您的回答。
uj5u.com熱心網友回復:
我認為您正在尋找關鍵路徑。
更改get_field_name為:
func getUserKeyPath(key: String?) -> KeyPath<User, String>? {
guard let key = key else { return nil }
let field: [_: KeyPath<User, _>] = [
"Name" : \.fullName,
"Username" : \.username,
"Bio" : \.description
]
return field[key]
}
然后你可以這樣做:
if let keyPath = getFieldKeyPath(key: item.title) {
Text(user[keyPath: keyPath])
} else {
// handle the case when item.title does not match any property name in User
}
如果要在Textwhenitem.title不匹配任何屬性名稱時顯示默認字串,也可以在單個運算式中執行此操作:
Text(getFieldKeyPath(key: "Name").map { user[keyPath: $0] } ?? "Unknown")
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/533047.html
標籤:迅速迅捷插入功能点
上一篇:如何避免從模塊匯入功能
