Solidity 练习:Todo List
睡不醒的鲤鱼 2022-12-29 Web3 Solidity
# 一、题目说明
编写一个合约用于存储一个 task 数组。
# 二、任务列表
- 声明一个 public 的状态变量命名为 todos,作为一个存储 Todo 结构体的数组。
- 编写一个函数 create(string calldata _text),用于创建一个新的 Todo 任务,text 属性通过参数传入,把该 Todo 任务添加到 todos 中。
- 编写一个函数 updateText(uint _index, string calldata _text),用于更新存储在 _index 的 Todo 结构体的 text 属性。
- 编写一个函数 toggleCompleted(uint _index),用于切换一个给定 index 的 Todo 结构体的 completed 字段。
- 编写一个函数 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
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