Итак, у меня есть либо словарь, либо массив, и вместо того, чтобы проверять null для любого из них, а затем перечислять их отдельно, используя свою собственную логику, я пытаюсь найти общее решение, которое независимо от типа коллекции выполняет итерацию по своим элементам, что-то вроде получения их перечислителя и просто делаю for(index,element) in enumerator
, но компилятор продолжает кричать. Я пробовал разные способы, и мне не повезло, я, похоже, не могу привести ни к типу стерты AnyCollection<AnyObject>
Я знаю, что вопрос немного расплывчатый, но это, вероятно, потому, что я все еще пытаюсь понять тип стирание и использование оберток Any(type)
Изменить: запрос на добавление попыток, но он не компилируется, как я сказал, у меня проблемы с общими протоколами.
var a = AnyCollection(array!)
var d = AnyCollection(dictionary!)
let enumerator = a == nil ? d.enumerated(): a.enumerated()//compile error
for(index,element) in enumerator {
}
Сообщение об ошибке:
Значения результата в '? :' выражение имеет несоответствующие типы 'EnumeratedSequence‹AnyCollection‹(ключ: String, значение: AnyObject)››' и 'EnumeratedSequence‹AnyCollection‹AnyObject››'
AnyObject
против(key: String, value: AnyObject)
) — даже если вы заставите это работать, вам придется выполнить некоторое беспорядочное приведение типов в вашем цикле, чтобы сделать что-нибудь полезное с элементами. - person Hamish   schedule 27.11.2016