2014-12-25 5 views
-1

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

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

одну из частей системы принимает AnyObject так это ошибка.

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

Должен ли я сделать выбор и придерживаться одного из типов: Any или AnyObject для системы в целом или лучшего выбора для маршрутизации предметов, если вас не интересуют их фактические типы.

мы имели тип Object на других языках, которые могли бы нести ничего вокруг, но не уверен, как это работает в СВИФТ мире

или есть отливка, которые могли бы работать между этими двумя? Если я 100% уверен, что наступающий объект AnyObject, я мог бы загрузить его из челнока (любой) как AnyObject

Примечания к негативным Проголосовали: Пожалуйста, помогите прояснить вопрос, если он Безразлично» т. Для вас это имеет смысл или помогите улучшить этот вопрос, так как я новичок в SWIFT. Мне нужен ответ, а не ваш голос.

Редактировать

случай, когда я должен был сделать сравнение между Any и AnyObject в то время как модульное тестирование, как бы вы справиться с такой ситуацией.

class Test { 
    var name: String = "test" 
} 

var anyObject: AnyObject = Test() 

var any: Any = anyObject 

//XCTAssert(any == anyObject, "Expecting them to be equal") 
any == anyObject 

ответ

1

Any проведет какой-либо типа, в том числе и структур перечислений, а также классов. AnyObject будет проводить только классы. Итак, что может быть Any является надмножеством того, что может быть AnyObject. Никакое количество кастингов не перекроет ваши пользовательские структуры или перечисления в AnyObject.

Иногда кажется, что AnyObject держит на структуру такой как String, но это не то, что произошли где-то по пути Свифт превратили ваш String в NSString (который является класс, так может быть сохранен в a AnyObject).

(технически Any определяется как то, что реализует 0 или более протоколов, которые ничего делает, в то время как AnyObject определяется как специальный протокол все классы неявно соответствовать, и помечается как @objc протокол, так что только классы могут соответствовать ей)

редактирование: ответить на ваш вопрос о сравнениях - нет == оператора Any или AnyObject (как она будет работать, если вы приравнены к Any, содержащему String Ань Any содержащего Int?). Вы должны вернуть обе стороны обратно в то, что они есть на самом деле, прежде чем вы сможете сравнить их с помощью соответствующего оператора для этого типа.

+0

спасибо, сэр, я отредактировал с более подробной информацией об этом, чтобы понять, как взаимодействовать между ними, хотя я решил придерживаться 'Any' всюду в моей системе, поэтому я не создаю конфликт между ними при назначении и назначении обратно в – user2727195

+0

Я также заметил, что любая импликация экземпляров экземпляров/объектов становится «AnyObject» – user2727195

+0

Обновлено для охвата редактирования (хотя на самом деле это отдельный вопрос, вы должны размещать отдельно). Я также настоятельно предлагаю искать обобщения или протоколы, а не прибегать к 'Any', чтобы передавать ваши объекты. В книге Apple Swift есть много информации. –

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