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()
}