setValuesForKeysWithDictionary in Swift 4?
Swift 4似乎正在实施不同的方法到(void)setValuesForKeysWithDictionary()
,Swift 4中这个函数有什么合适的替代?setValuesForKeysWithDictionary in Swift 4?
我有
struct User {
let name: String?
let email: String?
}
的dictionaryOfUsers
结构是从哪个值都动态地根据用户的数据库数量的数据结构来:
let dictionaryOfUsers = [{key1: "name1", key2 : "[email protected]"}, {key1 : "name2", key2 : "[email protected]"} ]
let users = [User]
现在我想用这个函数来创建我的用户数组以在Swift 4中创建字典:
for dictionary in dictionaryOfUsers {
let user = User()
user.setValuesForKeysWithDictionary(dictionary)
并追加到用户
users.append(user)
}
尝试此方法来代替:
func setValuesForKeys(_ keyedValues: [String : Any])
接收机的属性集合与来自给定字典中的值,利用其键来标识的属性。默认实现调用
setValue(_:forKey:)
每个键值对...
您的代码有许多小问题 - 一些重大问题,以及(见亚光答案获取更多信息)。无论如何,我认为这应该完成你所追求的:
import Foundation
class User: NSObject {
@objc var name: String!
@objc var email: String!
}
let dictionaryOfUsers = [
["name": "name1", "email": "[email protected]"],
["name": "name2", "email": "[email protected]"]
]
var users = [User]()
for dictionary in dictionaryOfUsers {
let user = User()
user.setValuesForKeys(dictionary)
users.append(user)
}
我想将字典作为单个对象传递给方法而不是传递键值pair func setValuesForKeys(_ keyedValues:[String:Any]) –
@AshimDahal我相信这就是你所追求的。 '[String:Any]'类型只是'Dictionary
@AshimDahal刚刚想到我还有另外一个(优雅!)的解决方案,使用Swift 4,结构体,并且没有keypaths;)如果我有时间,今天晚些时候会尝试发布它... –
的问题是,你要使用可可键 - 值编码 - 这就是setValuesForKeys(_:)
来自 - 在结构 。你不能那样做。可可是Objective-C; Objective-C不知道Cocoa结构是什么。您需要User
为从NSObject派生的@objc
类,并且其所有属性也需要公开为@objc
。
或者,使用新的Swift 4 keypaths功能,该功能可以通过其键访问struct属性。例如:
struct User {
var name: String?
var email: String?
}
let arrayOfDicts = [
[\User.name: "name1", \User.email : "[email protected]"],
[\User.name : "name2", \User.email : "[email protected]"]
]
for d in arrayOfDicts {
var user = User()
for key in d.keys {
user[keyPath:key] = d[key]!
}
print(user)
}
/*
User(name: Optional("name1"), email: Optional("[email protected]"))
User(name: Optional("name2"), email: Optional("[email protected]"))
*/
'key1'和'key2'代表什么?我期望''name''和'''email''字符串代替... –
是key1和key2是用于“name”和“email”的 –