首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用Swift生成UUID

用Swift生成UUID
EN

Stack Overflow用户
提问于 2017-07-11 02:35:00
回答 2查看 9.3K关注 0票数 8

我正在尝试使用Swift生成一个UUID。官方文件让我有点困惑。

文档

init?(uuidString: String)从“E621E1F8-C36C-495A-93FC-0C247A3E6E5F”等字符串创建UUID。

这是否意味着我需要创建UUID的字符串必须是该格式的?

对于我正在做的项目,我有一个字符串,我希望为该字符串生成一个UUID。

以下是我尝试过的:

代码语言:javascript
运行
复制
import Foundation

var str = UUID(uuidString: "Hello World")
print(str.uuidString)

这给了我错误,

可选类型“UUID?”的值不是拆开的,你是想用'!‘或者“?”?

我对斯威夫特和这一切还是很陌生的。我不知道在这种情况下该怎么办。

基本上,我需要为字符串(如"Hello“)生成一个UUID,然后使用UUID返回原始字符串。

EN

回答 2

Stack Overflow用户

发布于 2017-07-11 09:31:13

UUID().uuidString用于生成UUID。您需要import Foundation才能使用它。

这是一个UUID:E621E1F8-C36C-495A-93FC-0C247A3E6E5F

它们是从“无”中产生的,它们是独一无二的。如果您想要生成给定某个字符串的ID,并在任何时候使用该字符串生成相同的ID,则UUID将不适用于您。

你有可能在寻找Base64编码吗?

例如,使用Base64,您可以将Hello World编码为SGVsbG8gV29ybGQ=,然后将SGVsbG8gV29ybGQ=解码为Hello World

票数 9
EN

Stack Overflow用户

发布于 2017-08-03 16:31:42

对你问题的简短回答

1)是的,您必须为UUID提供适当格式的字符串,类似于示例:

代码语言:javascript
运行
复制
UUID(uuidString: "E621E1F8-C36C-495A-93FC-0C247A3E6E5F")

您使用的代码UUID(uuidString: "Hello World")将返回nil

( 2)看起来您真正想做的是加密和解密字符串。这方面有很多信息,也有很多方法。您可能需要从证书、密钥和信任服务编程指南开始。

更新:对于任何来这里的人,因为他们需要生成一个实际的UUID -

在终端命令行,输入uuidgen

进一步更新:要在Swift中以编程方式生成UUID (从3.1开始),请执行以下操作:

代码语言:javascript
运行
复制
import Foundation

let myUUID: String = UUID().uuidString

对错误消息的解释

请注意书面声明中的问号:

代码语言:javascript
运行
复制
init?(uuidString: String)

在Swift中,?后面的任何类型都是可选类型,这意味着结果将包含指定类型的值(此处为UUID)或无值(nil)。

单击文档中init?语句的链接,您将注意到讨论部分确实表明:

返回无效字符串的零。

您将得到这个错误,因为必须告诉Swift如何处理那些可能的结果

你必须要么:

  • 对可能的nil结果进行特定的代码处理。(例如,Swift提供if letguard语句。)
  • 强制展开”(可选类型)。在本例中,您告诉Swift,通过在可能的nil项后面添加一个!,可以确保结果不会是nil

在您的示例中,“强制展开可选的”如下所示:

代码语言:javascript
运行
复制
print(str.uuidString!)

当然,即使在没有错误消息的情况下进行编译,当出现无效的字符串("Hello“)时,它也会崩溃,从而产生一个nil。(Swift不喜欢你对可能的nil值撒谎,lol!)所以,要小心强制展开的值,您肯定不会是nil

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45024435

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档