0

我是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!"));

但我想创建两个组件来分离事物并开始应用一些设计模式

4

0 回答 0