2014-06-15 3 views
0

«Использование Swift с Cocoa и Objective C» позволяет вам четко определить isEquals для вещей, которые наследуются от NSObject, но после этого я не уверен, когда мне нужно его написать. В нем написано:Когда написано isEqual имеет смысл в Swift?

«Поскольку вы можете передавать объекты Swift (в том числе не связанные с NSObject) в API Objective-C, вам следует реализовать метод isEqual: для этих классов, если вы хотите, чтобы API-интерфейсы Objective-C сравнивали содержимое объектов, а не их идентификаторов ».

Но как мы узнаем, когда API-интерфейсы Cocoa будут использовать метод isEquals?

+0

API-интерфейс Cocoa всегда будет использовать метод isEqual при сравнении дженериков. Пример: сравнение подкласса 'NSString' с' id' будет использовать isEqual. –

ответ

0

Документация, которую вы цитируете, не предполагает, что вы должны попытаться угадать, будет ли API Cocoa использовать isEqual: или нет. В приведенной вами документации предлагается, что в любое время, когда вы собираетесь передать объект Object API-интерфейсу Objective-C, он должен реализовать этот метод.

Итак, для ЛЮБОГО объекта, который вы передаете ANY Cocoa API, вы должны реализовать метод isEqual: на всякий случай, если используемый вами API Cocoa использует этот метод.

+0

Если бы мы могли каким-то образом гарантировать, что будет только один экземпляр с определенным набором данных, например, не хотим ли мы его реализовать? – ctbeiser

+0

Из текста, который вы процитировали, это похоже на отсутствие 'isEqual:', тождества будут сравниваться (их местоположение памяти), поэтому вам не обязательно будет реализовывать его, но для полноты я бы его реализовал как сравнение «===», поэтому мы четко указываем, что это то, что мы намереваемся сделать. – nhgrif

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