Есть ли какой-либо простой встроенный способ генерации уникальных идентификаторов для любых объектов в приложении? (Хеш неприемлемо, поскольку в моей ситуации нормально иметь объекты с одинаковыми данными) ID приемлемый как либо string или integer, требуется только локальная уникальность. Google не помогаетUID для быстрых объектов
ответ
Если все, что вам нужно сделать, это определить, если два объекта, которые сравнивают с равным ==
различны, вы можете использовать ===
оператор:
let first = MyObject(value: 1)
let second = MyObject(value: 1)
first == second // returns true
first === second // returns false
Если вы действительно хотите получить уникальный идентификатор, спелеология в стандартную библиотеку Swift показывает:
/// Return an UnsafePointer to the storage used for `object`. There's
/// not much you can do with this other than use it to identify the
/// object
func unsafeAddressOf(object: AnyObject) -> UnsafePointer<Void>
Я не делаю никаких требований в отношении целесообразности использования этого. Возможно, он даже не работает так, как вы думаете, это будет зависеть от копий-на-записи shenanigans, вытащенных компилятором.
Почему не NSUUID от комментариев? Я хочу что-то, что не изменится после воссоздания множества объектов из файла или сети, например, поэтому я не уверен, что адреса объектов являются лучшим решением ... – maxpovver
А, я не понял, что вам нужно, тогда, особенно когда вы сказали «требуется только локальная уникальность». Ah well ... – dpassage
Я имел в виду, что только объекты, созданные в одном и том же запущенном приложении, должны иметь уникальные идентификаторы ... Извините за мой английский - не могу понять, что мне нужно, я долго не практиковал его. – maxpovver
Можете ли вы не просто назначить уникальный идентификатор своим объектам, используя собственный класс, который ими управляет? – Rambatino
См. [Класс NSUUID] (https://developer.apple.com/library/mac/documentation/Foundation/Reference/NSUUID_Class/index.html). – Darren
Спасибо, NSUUID, похоже, именно то, что мне нужно. – maxpovver