Swift 如何从领域列表加载数据

Swift 如何从领域列表加载数据,swift,swift3,realm,swift4,realm-list,Swift,Swift3,Realm,Swift4,Realm List,我正在从消息列表中的领域数据库加载消息 // loads all messages from database func loadMessages() { messages = List<Message>(realm.objects(Message.self)) collectionView?.reloadData() } 它在swift3上运行得很好,但当我迁移到swift4时,我遇到了错误: 传递给不带参数的调用的参数。 请

我正在从消息列表中的领域数据库加载消息

// loads all messages from database
    func loadMessages() {
        messages = List<Message>(realm.objects(Message.self))
        collectionView?.reloadData()
       }
它在
swift3
上运行得很好,但当我迁移到
swift4
时,我遇到了错误:

传递给不带参数的调用的参数。 请帮忙。


您可以将消息定义为数组
var messages=[Message]()
,并按如下方式加载它们:

messages:[Message]=realm.objects(Message.self).toArray()

如果查看realm的列表,您可以看到它唯一的初始值设定项没有任何输入参数。我真的看不出在领域对象子类之外存储
List
类型的属性有什么好处,因为您可以使用本机
Array
实现相同的功能,或者您也可以坚持使用自动更新
Results
集合

但是,如果确实要将
数组
转换为
列表
,可以创建一个空列表,然后将
数组
的元素附加到该列表中,而不是尝试在初始值设定项中添加元素

let messages = List<Message>() // List is a reference type, so you can declare it as immutable and you can still add elements to it

func loadMessages() {
    messages.append(realm.objects(Message.self))
    collectionView?.reloadData()
}
let messages=List()//List是一种引用类型,因此您可以将其声明为不可变,并且仍然可以向其添加元素
func loadMessages(){
messages.append(realm.objects(Message.self))
collectionView?.reloadData()
}

请参阅最新版本<代码>列表对象用于表示关系。这些类最适合代码中的
Message
类。对于视图控制器,将
结果
对象保存为成员字段将非常有效。如果您需要灵活选择集合类型,或者为具有不同类型领域集合的视图控制器提供基类,则可以使用
AnyRealmCollection
类型。

使用数组(realm.objects(Message.self))您可以在此处找到更改日志,但我使用消息作为列表的其他位置,因此它将产生问题
结果
没有名为
toArray()
的方法,因此如果您引用的是您创建的自定义方法,您应该在回答中包含该方法。但是,无论如何都不需要这样的方法,因为
数组
有一个初始值设定项接受
序列
,所以您只需执行
数组(realm.objects(Message.self))
即可将
结果
实例转换为
数组
// realm instance
    let realm = try! Realm()
let messages = List<Message>() // List is a reference type, so you can declare it as immutable and you can still add elements to it

func loadMessages() {
    messages.append(realm.objects(Message.self))
    collectionView?.reloadData()
}