Swift inout переданный массив, похоже, не влияет на исходный массив

#swift #inout

#swift #inout

Вопрос:

У меня простой случай, когда я, должно быть, неправильно использую inout.

 import Foundation

func test_inout(file_data: inout Array<String>){

          let inString = "abc,def,xyz"
            let file_data = inString.split { $0 == ","}.map(String.init)
            print(file_data)
        }

var array: Array = ["initial string"]
test_inout(file_data: amp;array)
print(array)
  

Вывод:

 ["abc", "def", "xyz"]
["initial string"]
  

Содержимое переданного массива изменилось, как видно на первом отпечатке, но не изменилось, как кажется на втором отпечатке. У меня есть это как переменная, и я использовал amp; в вызове.

Комментарии:

1. Это не имеет никакого смысла. Вы даже не используете исходные элементы массива.

Ответ №1:

Вы используете inout просто отлично. Проблема в том, как вы используете let . Вы создаете другой file_data , который затмевает inout переменную; inout сама переменная никогда не затрагивается, поэтому с ней ничего не происходит.

Решение: в этой строке:

 let file_data = inString.split { $0 == ","}.map(String.init)
  

…удалить let .