Солидность: вернуть массив в публичный метод - PullRequest
1 голос
/ 06 июня 2019

Я пытаюсь создать публичную функцию, которая возвращает массив, это ошибка

Возвращает отображение типа аргумента (uint256 => struct ItemList.Item storage ref) неявно преобразуется в ожидаемый тип (тип первого возвращаемая переменная) uint256 [] memory.

pragma solidity ^0.5.0;
contract ItemList {
    uint public itemCount = 0;
    mapping(uint256 => Item) public items;

    event ItemCreated (
        uint id,
        string proofdocument
    );

    struct Item {
        uint id;
        string proofdocument;
    }

    constructor() public {
    }

    function createItem(string memory _proofdocument) public {
        itemCount++;
        items[itemCount] = Item(itemCount, _proofdocument);
        emit ItemCreated(itemCount, _proofdocument);
    }

    function getItems() public pure returns(uint256[] memory ) {
        return items; <----------ERROR
    }
}

Спасибо, Андреа

1 Ответ

0 голосов
/ 07 июня 2019

Вы можете получить каждый элемент в цикле через web3.js библиотеку

const array = []
for (let i = 0; i < itemCount; itemCount += 1) {
    array.push(contract.getItem(i)) // where getItem do items[I] in solidity
}

Или вы можете использовать pragma experimental версию:

pragma solidity ^0.5.0;
pragma experimental ABIEncoderV2;

contract ItemList {
    uint public itemCount = 0;

    struct Item {
        uint id;
        string proofdocument;
    }
    Item[] items;

    constructor() public {}

    function createItem(string memory _proofdocument) public {
        itemCount++;
        items.push(Item(itemCount, _proofdocument));
    }

    function getItems() external view returns(Item[] memory) {
        return items;
    }
}
...