2016-11-02 3 views
0

Я уже попытался это:Любой массив в массив символов

var newArray = oldArray.map 
    { 
     Character($0) 
} 

где oldArray является массив типа [Любой]. Однако при вводе этого кода я получаю сообщение об ошибке. Есть ли другой вариант?

+0

Что ошибка ? – NRitH

+0

«Невозможно вызвать инициализатор для типа« Символ »с списком аргументов типа« ((Любой)) »« – Petravd1994

+0

Что такое 'oldArray' массив *? * – Hamish

ответ

2

Any не могут быть непосредственно преобразованы в Character, но должен быть сначала отливают в String (из которого она является простой задачей для преобразования (первый символ в строке) в Character:

let arr: [Any] = ["k", "n"] 
let newArr = arr.flatMap { ($0 as? String)?.characters.first } 
print(newArr, type(of: newArr)) // ["k", "n"] Array<Character> 
0

Если oldArray содержит объект типа Character:

var oldArray:[Any] = [] 
.... 
var newArray = oldArray.map { 
     $0 as! Character 
} 

таким образом он компилирует, но вы можете получить исключение во время выполнения Accordin к значению, сохраненному в oldArray.

+0

Это будет взрываться эффектно, если элементы в' oldArray' ('' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' редактор – NRitH

+0

Да, но он компилируется, ошибка компилятора не генерируется. У пользователя была ошибка во время компиляции. –

+0

Хорошо, спасибо, теперь нет ошибок! Тем не менее, я хотел использовать этот код, кроме того, в своем коде. Этот код работал с другим массивом, но теперь я получаю ошибку: «Значение типа« [Символ] »не имеет символа члена». Это моя строка кода: let decoded = String (newArray.characters.map ({decode [$ 0] ?? $ 0})) можете ли вы ответить на этот вопрос или я должен сделать еще один поток? Спасибо! – Petravd1994

Смежные вопросы