Управление обратными вызовами для Hyperledger Indy iOS SDK

Я создал новый проект xCode (swiftUI) и следовал инструкциям по установке Indy iOS SDK. Ссылка: https://github.com/hyperledger/indy-sdk/blob/master/wrappers/ios/README.md

Модуль установлен правильно, и я могу вызывать различные функции, предлагаемые SDK.

Хочу последовательно выполнить следующие операции:

  1. Создать кошелек
  2. Открыть кошелек

Я попытался вложить две операции:

let error = indy_create_wallet(0, walletConfig, credentials, {(commandHandle, err) in
        print("Create wallet error: ", err)
        let error = indy_open_wallet(1, self.walletConfig, self.credentials, {(commandHandle2, err2, handle) in
            print("Open wallet error: ", err2)
            
        })
    })

Но в этом случае я получаю сообщение об ошибке: указатель на функцию C не может быть сформирован из замыкания, которое захватывает контекст.

Я попытался использовать DispatchGroup, но снова получаю ту же ошибку, что и при вызове метода leave () для объекта внутри обратного вызова.

К сожалению, я не могу использовать оболочку libindy-objc, потому что она несовместима с используемой мной версией swift.

Есть ли у кого-нибудь идеи о том, как я могу управлять этими обратными вызовами для последовательного выполнения операции создания и открытия кошелька? Спасибо!


person zampi91    schedule 27.10.2020    source источник


Ответы (2)


Чтобы решить проблему, я импортировал (внутри новой группы) исходные файлы оболочки.

person zampi91    schedule 08.11.2020

Почему бы не использовать уже подготовленные обертки на гитхабе? https://github.com/hyperledger/indy-sdk/tree/master/wrappers/ios/libindy-pod/Indy/Wrapper

Это написано на ObjC, но с помощью Swift он может генерировать интерфейс сопоставления, затем вы можете упорядочить операции, используя DispatchSemaphore с .signal и .wait

person Ivan    schedule 24.11.2020