В качестве небольшого отклонения от правильного ответа kiwisip : я бы предложил поместить логику «создания подистории из истории» в пользовательский инициализатор:
extension SubHistory {
init(history: History) {
self.init(field1: history.field1, field2: history.field2)
}
}
ЗатемСопоставление может быть просто выполнено как
let histories: [History] = ...
let subHistories = histories.map(SubHistory.init)
Преимущество помещения инициализатора в расширение заключается в том, что по умолчанию для каждого элемента инициализируется элементный инициализатор - атрибуция для этого наблюдения переходит к @kiwisip!