Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 无法转换类型为';[信息]';到预期的参数类型';消息';_Swift_Xcode_Core Data - Fatal编程技术网

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解决方案,它起了作用。谢谢