使用Swift生成UUID

时间:2017-07-11 02:35:00

标签: swift uuid

我尝试使用Swift生成UUID。官方文档让我感到困惑。

documentation

  

The product failed to install the listed workloads and components due to one or more package failures. Incomplete workloads Visual Studio core editor (Microsoft.VisualStudio.Workload.CoreEditor,version=15.0.26228.0) Incomplete components Visual Studio core editor (Microsoft.VisualStudio.Component.CoreEditor,version=15.0.26208.0) You can search for solutions using the information below, modify your selections for the above workloads and components and retry the installation, or remove the product from your machine. Following is a collection of individual package failures that led to the incomplete workloads and components above. To search for existing reports of these specific problems, please copy and paste the URL from each package failure into a web browser. If the issue has already been reported, you can find solutions or workarounds there. If the issue has not been reported, you can create a new issue where other people will be able to find solutions or workarounds. Package 'Microsoft.Net.4.6.FullRedist,version=4.6.81.6' failed to repair. Search URL: https://aka.ms/VSSetupErrorReports?q=PackageId=Microsoft.Net.4.6.FullRedist;PackageAction=Repair;ReturnCode=5100 Impacted workloads Visual Studio core editor (Microsoft.VisualStudio.Workload.CoreEditor,version=15.0.26228.0) Impacted components Visual Studio core editor (Microsoft.VisualStudio.Component.CoreEditor,version=15.0.26208.0) Log C:\Users\kirstenAdmin\AppData\Local\Temp\dd_setup_20170711130222_002_Microsoft.Net.4.6.FullRedist.log Details Command executed: "C:\ProgramData\Microsoft\VisualStudio\Packages\Microsoft.Net.4.6.FullRedist,version=4.6.81.6\dotNetFx-x86-x64-AllOS-ENU.exe" /q /norestart /repair /KeepAUPaused /ChainingPackage Visual_Studio_15_Setup /CEIPconsent /log "C:\Users\kirstenAdmin\AppData\Local\Temp\dd_setup_20170711130222_002_Microsoft.Net.4.6.FullRedist.log" Return code: 5100 Return code details: Asia   从字符串创建UUID,例如“E621E1F8-C36C-495A-93FC-0C247A3E6E5F”。

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

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

这是我尝试的内容:

init?(uuidString: String)

这给了我错误,

  

可选类型的值' UUID?'没有打开;你的意思是使用'!'   或者'?'?

我对Swift和所有这些仍然很新。在这种情况下,我不知道该怎么做。

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

2 个答案:

答案 0 :(得分:2)

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

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

它们来自"没有",它们是唯一的。如果你想生成给定一些字符串的ID,并且使用该字符串随时生成相同的ID,那么UUID将不适合你。

您是否有可能在寻找Base64编码?

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

答案 1 :(得分:2)

对您的问题的简短回答

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

UUID(uuidString: "E621E1F8-C36C-495A-93FC-0C247A3E6E5F")

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

2)看起来你真正想做的是加密和解密字符串。有很多关于此的信息,以及许多方法。您可能希望从Certificate, Key, and Trust Services Programming Guide开始。

更新:对于任何来这里的人,因为他们需要生成一个实际的UUID -
在终端命令行,输入uuidgen

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

import Foundation

let myUUID: String = UUID().uuidString

错误消息说明

请注明文档声明中的问号:

init?(uuidString: String)

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

点击文档中init?语句的链接,您会注意到Discussion section确实表明:

  

返回无效字符串的nil。

您收到错误的原因是 Swift必须告知如何处理可能的nil结果

您必须:

  • 针对可能的nil结果的代码特定处理。 (例如,Swift为此提供if letguard语句。) OR
  • " 强行打开"可选类型。在这种情况下,您告诉Swift,您可以通过在可能的nil项目之后添加!来确保结果为nil

在你的情况下,"强行打开可选的"看起来像是:

print(str.uuidString!)

当然,即使这个没有错误消息进行编译,当无效字符串(" Hello World")出现时它会崩溃,产生nil。 (当你对可能的nil值撒谎时,斯威夫特并不喜欢,哈哈!)所以,要小心 强行打开你唯一不确定的值。 nil