2016-09-28 3 views
0

Мне нужно получить общий тип массива.Swift Получить общий тип массива

У меня есть объект, который является Array<Decodable>, но я не гарантирую, что общий тип всегда Decodable. Я знаю, что могу получить тип вещи, сказав array.self.dynamicType, чтобы получить Array.Type, но мне нужно что-то вроде array.generic.self.dynamicType, чтобы получить Decodable.Type. Как мне это сделать?

+1

Как вы только 'Array.Type' для печати? ['print ([1, 2, 3] .dynamicType)' дает 'Array '] (http://swiftlang.ng.bluemix.net/#/repl/57ebf024ad13d8063ad09cfc), а не просто 'Array'. Если вы ожидаете качественных ответов, вам нужно будет использовать более [конкретный, минимальный, полный и проверенный пример.] (Http://stackoverflow.com/help/mcve) – Alexander

+0

@AlexanderMomchliov Да, это дает Array , но это Array.Type. Должно было уточнить. Это кажется неуместным, хотя, учитывая, что я не забочусь об этом. Мне просто нужен общий тип. – steventnorris

ответ

0

Вы можете продлить Array с вычисленным свойством, что подвергает его общий параметр типа Element:

extension Array { 
    var ElementType: Element.Type { 
     return Element.self 
    } 
} 

print([1, 2, 3].dynamicType) //Array<Int> 
print([1, 2, 3].ElementType) //Int 
+0

Я сделаю это. Похоже, он мог делать то, что мне нужно. – steventnorris

+0

Это, безусловно, работает, но я все еще ищу лучший способ. – Alexander

+0

Иди в проблему с кастингом тоже, что я как бы должен делать. Если у вас есть мысли, я буду благодарен им. Написал новые вопросы, так как технически этот ответ на этот вопрос просто замечательный. http://stackoverflow.com/questions/39753881/determine-object-type-of-array-element-parameter – steventnorris

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