Swiftz уже предлагает Future, который является основным строительным блоком Promise. Будущее - это обещание, которое не может потерпеть неудачу (все термины здесь основаны на интерпретации Scala, , где Promise является монадой ).
https: // github. com / maxpow4h / swiftz / blob / master / swiftz / Future.swift
Надеюсь, что в какой-то момент мы сможем написать его в полной версии в стиле Скала (я могу написать это сам в какой-то момент; Конечно, другие PR будут приветствоваться, это не так сложно, если будущее уже на месте).
В вашем конкретном случае я, вероятно, создаю Примечания Result<[Book]>
(на основе версии Александроса Салазара Result
[/ д2]). Тогда ваша сигнатура метода будет: class func fetchGenres() -> Future
get
в Swift. Это нарушит определенные виды совместимости с ObjC. Book
, прежде чем возвращать результаты в качестве Future
. Существует несколько способов, с помощью которых эта система может выйти из строя, и гораздо удобнее, если вы проверите все эти вещи, прежде чем обернуть их в Future
. Переход к [Book]
намного лучше для остальной части вашего кода Swift, чем передача NSArray
.
Вместо того, чтобы вводить свою собственную повторную реализацию для вставки нескольких вложенных / связанных записей в разные таблицы, вам, вероятно, лучше использовать то, что Ecto
предоставляет из коробки: Ecto.Changeset.put_assoc/4
в User
' s changeset.
Он выполнит все проверки для вас и вернет неправильное значение changeset
, если что-то пошло не так.