2016-04-30 4 views
-1

Соответствует ли каждый тип быстродействующим, кроме функций, Any? Я понимаю, что AnyObject представляет собой все типы классов, а Any находится на более высоком уровне, чем другие типы. Однако я наткнулся на ситуацию, в последнее время, когда я была функция, которая выглядела так:Свифт соответствует любому

func myFunFunction(someArgument: Any) { 
    ... 
} 

И при вызове его с String аргументом: myFunFunction("This is a string") Я получаю ошибку о том, что тип String не может быть преобразован в типе Any.

Edit:

В приведенном выше примере только что, в качестве примера. Я хотел бы упростить код, чтобы получить ответ, но вот мой фактический код:

У меня есть класс final class CollectionViewBinder: NSObject, UICollectionViewDataSource, UICollectionViewDelegate { } , который служит помощником по связыванию коллекции для ReactiveCocoa.

Метод инициализации:

init(collectionView: UICollectionView, dataSignal: SignalProducer<[[Any]], NoError>, supplementarySignal: SignalProducer<[[Any]], NoError>?) { ... } 

Если тип dataSignal является SignalProducer<[[String]], NoError>, что, когда я получаю сообщение об ошибке говорящее типа SignalProducer<[[String]], NoError> не может быть преобразовано в тип SignalProducer<[[Any]], NoError>, который приведет меня к мысли, моя ошибка что-то возможно, с ReactiveCocoa?

+0

«Имеет ли каждый тип в стриже, кроме функций, соответствовать любому» № каждого типа Swift, _including_ функция, соответствует любому. – matt

+0

На игровой площадке я могу вызвать 'myFunFunction (« строка »)' без каких-либо ошибок. Это может помочь, если вы покажете фактический код. Быстрые сообщения об ошибках могут вводить в заблуждение, а фактическая ошибка часто бывает в другой строке или вызвана другой причиной. –

+0

Я обновил больше кода. – barndog

ответ

2

Вы правы Any, яблочные документы говорят:

Любой может представлять собой экземпляр любого типа на всех, в том числе функциональных типов.

Пример, который вы дали мне для работы без проблем. Обычно в таких ситуациях ошибка возникает в каком-то другом месте, но компилятор дает вводящее в заблуждение сообщение.

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