Swift 无法转换类型为';[信息]';到预期的参数类型';消息';
我正在学习教程,我得到了您可以在标题中看到的错误,以下是我的代码:Swift 无法转换类型为';[信息]';到预期的参数类型';消息';,swift,xcode,core-data,Swift,Xcode,Core Data,我正在学习教程,我得到了您可以在标题中看到的错误,以下是我的代码: func loadData() { let delegate = UIApplication.shared.delegate as? AppDelegate if let context = delegate?.persistentContainer.viewContext { if let friends = fetchFriends() { m
func loadData()
{
let delegate = UIApplication.shared.delegate as? AppDelegate
if let context = delegate?.persistentContainer.viewContext
{
if let friends = fetchFriends()
{
messages = [Message]()
for friend in friends
{
print(friend.name) // This line btw for some reason is giving me: Expression implicitly coerced from 'String?' to Any
let fetchRequest:NSFetchRequest<Message> = Message.fetchRequest()
fetchRequest.sortDescriptors = [NSSortDescriptor(key: "date", ascending: false)]
fetchRequest.predicate = NSPredicate(format: "friend.name = %@", friend.name!)
fetchRequest.fetchLimit = 1
do
{
let fetchedMessages = try(context.fetch(fetchRequest))
messages?.append(fetchedMessages)
// This above line is the line which is giving me this error:
//Cannot convert value of type '[Message]' to expected argument type 'Message'
}
catch let err
{
print(err)
}
}
}
}
}
func loadData()
{
让delegate=UIApplication.shared.delegate为?AppDelegate
如果让上下文=委托?.persistentContainer.viewContext
{
如果let friends=fetchFriends()
{
messages=[Message]()
朋友中的朋友
{
print(friend.name)//由于某种原因,这一行btw给了我:表达式从'String'隐式强制为Any
let fetchRequest:NSFetchRequest=Message.fetchRequest()
fetchRequest.sortDescriptors=[NSSortDescriptor(键:“日期”,升序:false)]
fetchRequest.predicate=NSPredicate(格式:“friend.name=%@”,friend.name!)
fetchRequest.fetchLimit=1
做
{
让fetchedMessages=try(context.fetch(fetchRequest))
消息?.append(fetchedMessages)
//上面这一行就是给我这个错误的那一行:
//无法将“[Message]”类型的值转换为预期的参数类型“Message”
}
捉迷藏
{
打印(错误)
}
}
}
}
}
正如你从13分钟左右看到的,我的代码看起来并不完全一样,因为视频有点旧,使用的是旧版本的swift
我希望有人能帮我解决这个错误,因为我不知道该怎么办,提前谢谢你。
append
是将单个元素附加到数组中。您可以使用+=
连接两个数组
messages! += fetchedMessages
如果
消息
是可选类型,您可以强制将其展开,因为您知道您已经将其设置为空数组,但坦率地说,我不会将消息
设置为可选-只需将其初始化为[]附加
就是将单个元素附加到数组中。您可以使用+=
连接两个数组
messages! += fetchedMessages
如果消息
是可选类型,您可以强制展开它,因为您知道您已经将其设置为空数组,但坦率地说,我不会将消息
设置为可选-只需将其初始化为[]试试下面的行
messages.append(contentsOf: fetchedMessages)
而不是:messages.append(fetchedMessages)
请在下面的行中尝试
messages.append(contentsOf: fetchedMessages)
而不是:
messages.append(fetchedMessages)
您应该编写此命令-print(friend.name,如有)或print(friend.name!),以使警告静音,因为friend.name是您尚未展开的可选选项。您得到的错误意味着您正在传递消息类型的“数组”,而不是将单个“消息”对象传递给append方法。编辑:正如下面一些用户所提到的,您必须将fetchedMessages数组的内容追加到messages数组,即逐个追加每个元素。您的错误是您只是尝试将整个数组附加到messages数组。希望你能理解。啊,好吧,我现在明白了为什么它不起作用了,我在视频中使用了旧版本的附加函数,所以xcode将它更正为我目前使用的不起作用的代码,但我尝试了Moayad Al-kouz解决方案,它起了作用。谢谢。你应该写这个-print(friend.name,如有)或print(friend.name!)来消除警告,因为friend.name是可选的,你还没有打开它。您得到的错误意味着您正在传递消息类型的“数组”,而不是将单个“消息”对象传递给append方法。编辑:正如下面一些用户所提到的,您必须将fetchedMessages数组的内容追加到messages数组,即逐个追加每个元素。您的错误是您只是尝试将整个数组附加到messages数组。希望你能理解。啊,好吧,我现在明白了为什么它不起作用了,我在视频中使用了旧版本的附加函数,所以xcode将它更正为我目前使用的不起作用的代码,但我尝试了Moayad Al-kouz解决方案,它起了作用。谢谢