在我的iOS Swift应用程序中,我想生成随机UUID (GUID)字符串用作表键,这段代码似乎可以工作:
let uuid = CFUUIDCreateString(nil, CFUUIDCreate(nil))
这样安全吗?
或者是否有更好的(推荐的)方法?
在我的iOS Swift应用程序中,我想生成随机UUID (GUID)字符串用作表键,这段代码似乎可以工作:
let uuid = CFUUIDCreateString(nil, CFUUIDCreate(nil))
这样安全吗?
或者是否有更好的(推荐的)方法?
当前回答
在macOS 13和Swift 5.7下,Foundation的UUID()方法确实返回一个大写UUID,而Vapor Fluent至少是一个按原样使用它的框架。因此,当您创建一个id=nil的新记录时,Fluent将获得一个新的大写UUID,并使用它存储新记录。另一方面,MySQL生成小写的UUID,如果在MySQL中创建记录,则将存储小写的UUID。MySQL和SQLite都将大写和小写键视为不同的。购者自慎。
但是…如果使用前一次数据读取的UUID,则保存的UUID是大写还是小写并不重要。你只需要确保不要改变钥匙的大小写。
其他回答
对于Swift 3,许多Foundation类型已经放弃了'NS'前缀,所以你可以通过UUID(). uuidstring访问它。
你也可以在下面使用小写字母
let uuid = NSUUID().UUIDString.lowercaseString
print(uuid)
输出
68B696D7-320B-4402-A412-D9CEE10FC6A3
谢谢你!
试试这个:
let uuid = NSUUID().uuidString
print(uuid)
斯威夫特3/4/5
let uuid = UUID().uuidString
print(uuid)
在macOS 13和Swift 5.7下,Foundation的UUID()方法确实返回一个大写UUID,而Vapor Fluent至少是一个按原样使用它的框架。因此,当您创建一个id=nil的新记录时,Fluent将获得一个新的大写UUID,并使用它存储新记录。另一方面,MySQL生成小写的UUID,如果在MySQL中创建记录,则将存储小写的UUID。MySQL和SQLite都将大写和小写键视为不同的。购者自慎。
但是…如果使用前一次数据读取的UUID,则保存的UUID是大写还是小写并不重要。你只需要确保不要改变钥匙的大小写。
你也可以使用NSUUID API:
let uuid = NSUUID()
如果你想取回字符串值,你可以使用uuid.UUIDString。
注意,NSUUID可从iOS 6及更高版本使用。