Использовать неразрешенный идентификатор 'finalArray'?

-1
var firstArray = ["1.","2.","3.","4."]

var secondArray = ["a","b","c"]

func combineTheArrays(array1: [Any], array2: [Any]) -> [Any] {

    var finalArray = [Any]()

    let maxIndex = array1.count >= array2.count ? array1.count : array2.count;

    for i in 0...maxIndex{
        if (array1.count > i){
            finalArray.append(array1[i])
        }
        if (array2.count > i){
            finalArray.append(array2[i])
        }
    } }

combineTheArrays(array1: firstArray, array2: secondArray)

print(finalArray)

Я пытаюсь взять два массива с разными/похожими типами и работать с ними через функцию и объединить в один массив. Идеальным результатом этой функции является печать:

finalArray = ["1.", "a", "2.", "b", "3.", "c", "4."]
  • 4
    finalArray - локальная переменная в функции. Также должна быть ошибка «отсутствует возврат в функции» ...
  • 0
    (Не имеет отношения к вашей конкретной проблеме, но см. Stackoverflow.com/questions/34951824/… для других подходов для достижения того же результата.)
Показать ещё 3 комментария
Теги:
arrays
function

1 ответ

0
Лучший ответ

Вы очень близко! Вам просто нужно вернуть finalArray в конце определения функции, а затем назначить результат вызова функции, чтобы вы могли использовать его (например, при вызове print):

let finalArray = combineTheArrays(array1: firstArray, array2: secondArray)

print(finalArray)

Вы также должны использовать generics, чтобы гарантировать, что вы можете обрабатывать любые элементы, если их типы одинаковы. В отличие от возвращаемого Any, ваш результат будет массивом того же типа, который будет более безопасным и простым в работе. Вот как я хотел бы улучшить этот код:

func combineTheArrays<T>(array1: [T], array2: [T]) -> [T] {

    let maxIndex = max(array1.count, array2.count);

    var finalArray = [T]()
    finalArray.reserveCapacity(array1.count + array2.count)

    for i in 0..<maxIndex {
        if i < array1.count { finalArray.append(array1[i]) }
        if i < array2.count { finalArray.append(array2[i]) }
    }

    return finalArray
}

var firstArray = ["1.","2.","3.","4."]
var secondArray = ["a","b","c"]
let finalArray = combineTheArrays(array1: firstArray, array2: secondArray)

print(finalArray)
  • 0
    Большое спасибо, я потратил в общей сложности около 2 часов, пытаясь по-другому взглянуть на то, как заставить его напечатать. У меня есть вопрос, хотя, если вы могли бы ответить, зачем мне делать finalArray константой, если я уже делаю ее переменной в функции?
  • 0
    Потому что эта переменная в функции не имеет абсолютно никакого отношения к внешнему миру. Это локальная переменная, которая существует только на время существования функции. Он создается при вызове функции и уничтожается при завершении функции.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню