2014-12-22 2 views
0

Есть ли какой-либо простой встроенный способ генерации уникальных идентификаторов для любых объектов в приложении? (Хеш неприемлемо, поскольку в моей ситуации нормально иметь объекты с одинаковыми данными) ID приемлемый как либо string или integer, требуется только локальная уникальность. Google не помогаетUID для быстрых объектов

+0

Можете ли вы не просто назначить уникальный идентификатор своим объектам, используя собственный класс, который ими управляет? – Rambatino

+0

См. [Класс NSUUID] (https://developer.apple.com/library/mac/documentation/Foundation/Reference/NSUUID_Class/index.html). – Darren

+0

Спасибо, NSUUID, похоже, именно то, что мне нужно. – maxpovver

ответ

1

Если все, что вам нужно сделать, это определить, если два объекта, которые сравнивают с равным == различны, вы можете использовать === оператор:

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, вытащенных компилятором.

+0

Почему не NSUUID от комментариев? Я хочу что-то, что не изменится после воссоздания множества объектов из файла или сети, например, поэтому я не уверен, что адреса объектов являются лучшим решением ... – maxpovver

+0

А, я не понял, что вам нужно, тогда, особенно когда вы сказали «требуется только локальная уникальность». Ah well ... – dpassage

+0

Я имел в виду, что только объекты, созданные в одном и том же запущенном приложении, должны иметь уникальные идентификаторы ... Извините за мой английский - не могу понять, что мне нужно, я долго не практиковал его. – maxpovver