Я хотел бы использовать более функциональное программирование в Swift. Некоторые из функций, которые я пишу, могут хорошо работать на массивах различных типов. Я не хочу переписывать одну и ту же функцию с разными типами (или typealiases.) Шаблон, как работает функция, часто одинаков, как раз с разными типами. Таким образом, я пытался что-то вроде этого:Функции на общих массивах
// Add indeces to an array of any type. I.e., returns an array of tuples of the array index and the original element.
func addIndeces<T: AnyObject>(toArray: Array<T>) -> Array<(index: Int, value: T)> {
var arrIndex: [Int] = []
for index in 0...toArray.count {
arrIndex.append(index)
}
return Array(Zip2(arrIndex, toArray))
}
Когда я называю эту функцию
// Note: reminderList is of type [Reminder]
let indexedReminderList = addIndeces(reminderList) as! [(index: Int, reminder: Reminder)]
я получаю ошибку во время выполнения: «неустранимая ошибка: не может unsafeBitCast между типами различных размеров»
Что я делаю неправильно?
Я скопировал свой код, но я не получаю сообщение об ошибке выполнения. Вместо этого возникает ошибка compiletime, где говорится, что я должен измениться как! как. Можете ли вы объяснить, почему вы вообще делаете свой результат? Одно замечание: вы можете просто вернуть Array (Zip2 (Array (0 ..
Qbyte
@Qbyte или даже 'Array (zip (индексы (toArray), toArray))' или (работает только с целые индексированные коллекции) 'Array (enumerate (toArray))' –
Спасибо за оптимизацию. Я использовал их. Однако проблема все еще существует. Он должен быть «как!'иначе вы получите эту ошибку:' Array <(index: Int, value: Reminder)> 'не конвертируется в' [(index: Int, напоминание: напоминание)] '; вы хотели использовать «как!» заставить downcast? – Daniel