Swift:String中的唯一Int id

时间:2015-10-27 18:53:51

标签: swift parse-platform

我正在使用Parse,它在数据库中有一个preload User表。我希望每个用户都有一个唯一的userId(Int)。 Parse的objectId是唯一的,但不是Int,username是String。用户名对于每个用户都是唯一的,因此我可以以某种方式将每个用户名转换为数字吗?

我试过.toInt(),Int(),但我什么都没得到。

为什么:
我有一个用户评级(电影)的现有表格,我想扩大这个表格的评级。 userId字段是Number值,所以我必须保持这种方式。

2 个答案:

答案 0 :(得分:5)

Swift String有一个hash属性。它也符合Hashable protocol。也许你可以使用它。

但是,hashValue有以下评论:

  

Axiom:x == y暗示x.hashValue == y.hashValue。

     

注意:哈希值   并不保证在不同的调用中保持稳定   同样的计划。不要在程序运行中保持哈希值。

所以,请小心使用......

注意:如评论中所述,hashValue不保证是唯一的,但碰撞应该很少,所以无论如何它都可能是一个解决方案。

答案 1 :(得分:3)

无法使用唯一的任意String到Int映射。您必须对允许的字符和字符串长度设置一些约束。但是,即使您使用不区分大小写的字母数字用户名,并使用一些智能可变长度位编码,您也可以在粗略平均值上查看每个字符大约5位。 64位整数可以通过这种方式容纳多达12个字符。比这更长,你将不可避免地发生碰撞。

我认为你从错误的一端解决问题。而不是具有String的函数 - > Int映射,阻止你使用Int< - >的单独表格字符串映射?只需要一些功能来检查该表中是否存在userID,如果不存在,则为此类userID插入一条新记录,并为其分配一个新的唯一编号。这样,耗费64位整数容量需要相当长的时间和服务流行度。