我正在使用核心数据在登录/注册表单中查找重复的用户名。这是我的代码:
let context = managedObjectContext
let entity = NSEntityDescription.entity(forEntityName: "MyEntityName", in: managedObjectContext)
let request = NSFetchRequest<NSFetchRequestResult>()
request.entity = entity
var Fetcherror: Error?
var mutableFetchResults = try? managedObjectContext.fetch(request)
// if mutableFetchResults == nil {
// print ("error")
// }
if mutableFetchResults?.contains(where: usernamefield.text){
print("duplicates")
return
} else {
// add the user
}
但是,我在第一个if语句中收到以下错误:
你能帮帮我吗?提前致谢无法转换'String'类型的值?预期的参数类型'(Any)throws - &gt;布尔“
答案 0 :(得分:0)
mutableFetchResults
结果数组不包含String
但User
类型。 usernamefield.text
的类型为String
。这就是为什么你不能以contains
的方式使用它。
首先尝试将mutableFetchResults
映射到String
类型的数组。
if let mutableFetchResults = mutableFetchResults {
let stringArray = mutableFetchResults.flatMap { $0.username }
if stringArray.contains(where: usernamefield.text) {
print("duplicates")
return
}
}
username
是您要检查的String
课程的User
媒体资源。
您的完整代码应如下所示。
let context = managedObjectContext
let request: NSFetchRequest<User> = User.fetchRequest()
var fetchError: Error?
var mutableFetchResults = try? managedObjectContext.fetch(request)
// if mutableFetchResults == nil {
// print ("error")
// }
if let mutableFetchResults = mutableFetchResults {
let stringArray = mutableFetchResults.flatMap { $0.username }
if stringArray.contains(where: usernamefield.text) {
print("duplicates")
return
} else {
// add the user
}