我是Rust新手,刚开始学习,想搭建一个简单的GUI,发现这个库iced有一个很棒的API,但是没有资源可以学习,文档也不清楚
我正在尝试构建两个组件,第一个组件是显示一篇文章,第二个是显示包含第一个的文章列表
这是我的代码
pub struct MarkData{
title: String,
description: String,
content: String,
image: String
}
enum Message{}
#[derive(Clone)]
pub struct MarkComponent{
data: MarkData
}
impl MarkComponent {
fn new(data: MarkData) -> Self {
Self {
data
}
}
pub fn view(&mut self) -> Row<Message> {
Row::new().push(
Text::new(&self.data.title).size(25)
)
}
}
#[derive(Clone)]
pub struct MarkComponents{
data: Vec<MarkComponent>,
}
impl MarkComponents {
pub fn new() -> Self {
let iter = (0..20).map(|a| MarkData {
title: format!("title {}", a),
description: format!("description {}", a),
content: format!("content {}", a),
image: format!("https://google.com")
});
Self {
data: Vec::from_iter(iter.map(|item| {
MarkComponent::new(item)
}))
}
}
pub fn view(&mut self) -> Row<Message> {
let mut row = Row::new();
for item in &self.data {
let content =
item.clone().view();
row = row.push( content ); // here is the error line
}
return row;
}
}
问题是,当我尝试从中返回 create rwoMarkComponent
并将其推送到MarkComponents Row
它时会出现恐慌并出现此错误:
returns a value referencing data owned by the current function
但是,当尝试将Text
元素直接推入row
其中时,可以正常工作,如下所示
row = row.push(Text::new("now works fin!"));
但我想创建两个组件来分离事物并开始应用一些设计模式