我正在尝试使用Swift生成一个UUID。官方文件让我有点困惑。
文档说
init?(uuidString: String)
从“E621E1F8-C36C-495A-93FC-0C247A3E6E5F”等字符串创建UUID。
这是否意味着我需要创建UUID的字符串必须是该格式的?
对于我正在做的项目,我有一个字符串,我希望为该字符串生成一个UUID。
以下是我尝试过的:
import Foundation
var str = UUID(uuidString: "Hello World")
print(str.uuidString)
这给了我错误,
可选类型“UUID?”的值不是拆开的,你是想用'!‘或者“?”?
我对斯威夫特和这一切还是很陌生的。我不知道在这种情况下该怎么办。
基本上,我需要为字符串(如"Hello“)生成一个UUID,然后使用UUID返回原始字符串。
发布于 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
。
发布于 2017-08-03 16:31:42
对你问题的简短回答
1)是的,您必须为UUID提供适当格式的字符串,类似于示例:
UUID(uuidString: "E621E1F8-C36C-495A-93FC-0C247A3E6E5F")
您使用的代码UUID(uuidString: "Hello World")
将返回nil
。
( 2)看起来您真正想做的是加密和解密字符串。这方面有很多信息,也有很多方法。您可能需要从证书、密钥和信任服务编程指南开始。
更新:对于任何来这里的人,因为他们需要生成一个实际的UUID -
在终端命令行,输入uuidgen
。
进一步更新:要在Swift中以编程方式生成UUID (从3.1开始),请执行以下操作:
import Foundation
let myUUID: String = UUID().uuidString
对错误消息的解释
请注意书面声明中的问号:
init?(uuidString: String)
在Swift中,?
后面的任何类型都是可选类型,这意味着结果将包含指定类型的值(此处为UUID
)或无值(nil
)。
单击文档中init?
语句的链接,您将注意到讨论部分确实表明:
返回无效字符串的零。
您将得到这个错误,因为必须告诉Swift如何处理那些可能的结果。
你必须要么:
nil
结果进行特定的代码处理。(例如,Swift提供if let
和guard
语句。)或nil
项后面添加一个!
,可以确保结果不会是nil
。在您的示例中,“强制展开可选的”如下所示:
print(str.uuidString!)
当然,即使在没有错误消息的情况下进行编译,当出现无效的字符串("Hello“)时,它也会崩溃,从而产生一个nil
。(Swift不喜欢你对可能的nil
值撒谎,lol!)所以,要小心强制展开的值,您肯定不会是nil
!
https://stackoverflow.com/questions/45024435
复制相似问题