Solidity 练习:Todo List

2022-12-29 Web3 Solidity

# 一、题目说明

编写一个合约用于存储一个 task 数组。

# 二、任务列表

  1. 声明一个 public 的状态变量命名为 todos,作为一个存储 Todo 结构体的数组。
  2. 编写一个函数 create(string calldata _text),用于创建一个新的 Todo 任务,text 属性通过参数传入,把该 Todo 任务添加到 todos 中。
  3. 编写一个函数 updateText(uint _index, string calldata _text),用于更新存储在 _index 的 Todo 结构体的 text 属性。
  4. 编写一个函数 toggleCompleted(uint _index),用于切换一个给定 index 的 Todo 结构体的 completed 字段。
  5. 编写一个函数 get(uint _index),用于返回存储在 _index 的 Todo,函数输出为 text 和 completed。

# 三、解答代码

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;

contract TodoList {
    struct Todo {
        string text;
        bool completed;
    }

    Todo[] public todos;

    function create(string calldata _text) external {
        todos.push(Todo({text: _text, completed: false}));
    }

    function updateText(uint _index, string calldata _text) external {
        Todo storage todo = todos[_index];
        todo.text = _text;
    }

    function toggleCompleted(uint _index) external {
        Todo storage todo = todos[_index];
        todo.completed = !todo.completed;
    }

    function get(uint _index) external view returns (string memory, bool) {
        Todo storage todo = todos[_index];
        return (todo.text, todo.completed);
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

# 四、参考资料

Last Updated: 2023-01-28 4:31:25