я играл с обобщениями и имею эту функцию, которая принимает массив и проверяет, если он содержит заданное значение ...Swift Дженерик с любым
func finder<T:Equatable>(array:[T], valueToFind:T) -> Int? {
for(index, value) in enumerate(array) {
if(value == valueToFind) {
return index
}
}
return nil
}
Если я использую его с помощью этого тестового массива, это работает отлично и возвращает правильный индекс.
var testArray = ["Dog", "Cat", "Mouse", "Tiger"]
finder(testArray, "Cat")
Аналогично работает для этого тестового массива чисел:
var testArray = [1, 2]
finder(testArray, 1)
Однако, когда у меня есть тестовый массив, как это со строками и пронумерована, (я предполагаю Inferred быть типа Any, то функция не работает, и я получаю ошибку компиляции: «? Int»
var testArray = ["Dog", "Cat", "Mouse", "Tiger", 2]
finder(testArray, "Cat")
не удается преобразовать тип выражения с типа «StringLiteralConvertible» Почему это?
Интересно, что даже ты gh отображается ошибка, она по-прежнему работает так, как вы ожидали (тестирование на игровой площадке). – jtbandes
@jtbandes интересный - для меня это не работает! Я на Beta 4. – Woodstock
На самом деле, он работает, если вы помещаете массив в строку, но то, что не работает для меня, - это сохранение массива как переменной (без явного указания 'Any') – jtbandes