【问题标题】:Generate a UUID on iOS from Swift从 Swift 在 iOS 上生成 UUID
【发布时间】:2014-08-17 04:08:03
【问题描述】:

在我的 iOS Swift 应用程序中,我想生成随机 UUID (GUID) 字符串以用作表键,并且这个 sn-p 似乎 可以工作:

let uuid = CFUUIDCreateString(nil, CFUUIDCreate(nil))

这样安全吗?

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

【问题讨论】:

  • 你也可以使用 let uuid = NSUUID.UUID().UUIDString
  • 请接受其中一个答案,而不是您的编辑。既然你按照@AhemdAlHafoudh 提议的方式做,我建议你接受他的回答。
  • 啊,明白了。谢谢...完成。

标签: ios swift cocoa-touch guid core-foundation


【解决方案1】:

您也可以只使用NSUUID API:

let uuid = NSUUID()

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

请注意,NSUUID 适用于 iOS 6 及更高版本。

【讨论】:

    【解决方案2】:

    试试这个:

    let uuid = NSUUID().uuidString
    print(uuid)
    

    斯威夫特 3/4/5

    let uuid = UUID().uuidString
    print(uuid)
    

    【讨论】:

    • 在 XCode 6.1 中,我发现了这个错误:'UUID()' is unvilable: use object construction 'NSUUID()'。我们应该把它改成 NSUUID().UUIDString
    • 上面的建议和打电话NSUUID.init().UUIDString没什么区别吧?
    • 从 Xcode 8(测试版)、iOS 10 和 Swift 3 开始,它已重命名为 UUID().uuidString
    • 介意将这个添加到答案中吗?
    • 您好,我使用了这种方法 UUID().uuidString 但每次我使用它时它似乎都会返回不同的字符串,我希望它仅为我安装的应用程序的 1 值。有什么见解吗?
    【解决方案3】:

    你也can在下面使用lowercase

    let uuid = NSUUID().UUIDString.lowercaseString
    print(uuid)
    

    输出

    68b696d7-320b-4402-a412-d9cee10fc6a3

    谢谢!

    【讨论】:

    • 谢谢。现在是NSUUID().uuidString.lowercased()
    • 这样使用小写有什么好处?
    • 或许比大写更顺眼?
    • 好处是它应该输出小写,因为所有其他平台根据规范输出小写。苹果做错了。
    • UUID 以基数 16 编写,使用数字 0-9 和字符 a-f。大写和小写字母之间没有区别。但是,RCF 4122 tools.ietf.org/html/rfc4122#section-3 要求 UUID 生成器以小写形式输出,但系统接受大小写的 UUID。
    【解决方案4】:

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

    【讨论】:

      【解决方案5】:

      对于Swift 4

      let uuid = NSUUID().uuidString.lowercased()
      

      【讨论】:

      • Graveyard nitpick here,但我不知道为什么小写 UUID 比常规 UUID 更可取。
      • 因为它们应该是小写的。根据规格。 UUID 可以在任何一种情况下读取,但应输出小写。 iOS 是唯一输出大写的平台。
      • UUID 以基数 16 编写,使用数字 0-9 和字符 a-f。大写和小写字母没有区别。但是,RCF 4122 tools.ietf.org/html/rfc4122#section-3 要求 UUID 生成器以小写形式输出,但系统接受大小写的 UUID。
      【解决方案6】:

      每次都会生成相同的:

      if let uuid = UIDevice.current.identifierForVendor?.uuidString {
          print(uuid)
      }
      

      每次都会生成一个新的:

      let uuid = UUID().uuidString
      print(uuid)
      

      【讨论】:

      • 那么,我应该为 GADMobileAds 使用哪一个?
      【解决方案7】:

      UUID 是一个简单的结构,具有uuidString 属性。 uuidString - 返回从 UUID 创建的字符串,例如“E621E1F8-C36C-495A-93FC-0C247A3E6E5F”。

      UUID 保证是唯一的

      Swift 代码:

      let identifier = UUID().uuidString
      Swift.print(identifier) // Result: "6A967474-8672-4ABC-A57B-52EA809C5E6D"
      

      关于UUID的Apple官方文档。
      全文https://tonidevblog.com/posts/how-to-generate-a-random-unique-identifier-with-uuid/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-08-20
        • 2016-02-25
        • 1970-01-01
        • 2021-12-13
        • 2016-10-23
        • 2017-06-25
        • 2013-11-16
        • 1970-01-01
        相关资源
        最近更新 更多