从Swift在iOS上生成UUID

zac*_*aan 288 cocoa-touch guid core-foundation ios swift

在我的iOS Swift应用程序中,我想生成随机UUID(GUID)字符串以用作表键,并且此代码段似乎有效:

let uuid = CFUUIDCreateString(nil, CFUUIDCreate(nil))
Run Code Online (Sandbox Code Playgroud)

这样安全吗?

或者是否有更好的(推荐)方法?

Ahm*_*udh 609

试试这个:

let uuid = NSUUID().uuidString
print(uuid)
Run Code Online (Sandbox Code Playgroud)

斯威夫特3/4

let uuid = UUID().uuidString
print(uuid)
Run Code Online (Sandbox Code Playgroud)

  • 在XCode 6.1中,我发现了这个错误:'UUID()'不可用:使用对象构造'NSUUID()'.我们应该将它改为NSUUID().UUIDString (6认同)
  • 从Xcode 8(beta),iOS 10和Swift 3开始,它已被重命名为`UUID().uuidString` (4认同)

Jam*_*ost 27

您也可以使用NSUUID API:

let uuid = NSUUID()
Run Code Online (Sandbox Code Playgroud)

如果要将字符串值取回,可以使用uuid.UUIDString.

请注意,NSUUIDiOS 6及更高版本提供此功能.


小智 17

对于Swift 4 ;

let uuid = NSUUID().uuidString.lowercased()
Run Code Online (Sandbox Code Playgroud)

  • 这里有坟场nitpick,但我不知道为什么小写的UUID比常规的UUID更可取。 (3认同)
  • 因为它们应该是小写的。根据规格。UUID 可以在任何一种情况下读取,但应输出小写。iOS 是唯一输出大写字母的平台。 (3认同)

Sco*_*t H 12

对于Swift 3,许多Foundation类型都删除了"NS"前缀,因此您可以通过它访问它UUID().uuidString.


iAl*_*ndr 7

每次都会生成相同的:

if let uuid = UIDevice.current.identifierForVendor?.uuidString {
    print(uuid)
}
Run Code Online (Sandbox Code Playgroud)

每次都会生成一个新的:

let uuid = UUID().uuidString
print(uuid)
Run Code Online (Sandbox Code Playgroud)


Swi*_*per 6

can也可以lowercase在下面使用它

let uuid = NSUUID().UUIDString.lowercaseString
print(uuid)
Run Code Online (Sandbox Code Playgroud)

产量

68b696d7-320b-4402-A412-d9cee10fc6a3

谢谢 !

  • 使用像这样的小写有什么好处? (4认同)