Swift3 中的 UUID,但“版本 1"样式 UUID [英] UUID in Swift3, but "version 1" style UUID

查看:48
本文介绍了Swift3 中的 UUID,但“版本 1"样式 UUID的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这个问题是关于 Swift.

Swift 中生成 rfc UUID 非常容易,得到一个 Swift String,因为在这个阶段 Apple 已经为它制作了一个 Swift 方法......

It's very easy to generate a rfc UUID in Swift getting a Swift String as at this stage Apple have made a Swift method for it...

func sfUUID()->String
    {
    return UUID().uuidString.lowercased()
    }

在使用 Swift

(例如:https://en.wikipedia.org/wiki/Universally_unique_identifier#Version_1_.28date-time_and_MAC_address.29)

有没有办法在 Swift3 中做到这一点?(仅限 >9)

Is there a way to do this in Swift3? ( >9 only)

Swift 中,如何获取版本 1 UUID.因此,在 UUID() 调用中可能有一些我不知道的选项,或者调用 C 调用并将结果安全地作为 String 调用存在困难>.

In Swift, how to get a Version 1 UUID. So, there might be some option I don't know about on the UUID() call, or there's the difficulty of calling a C call and getting the result safely as a String.

推荐答案

这已经过时了.不要再这样做了.

我会删除答案,但已打勾!

This is incredibly out of date. Don't do this any more.

I'd delete the answer, but it's ticked!

进入 C 调用的 Swift 代码...

Swift code which gets to the C call...

func generateVersionOneAkaTimeBasedUUID() -> String {

    // figure out the sizes

    let uuidSize = MemoryLayout<uuid_t>.size
    let uuidStringSize = MemoryLayout<uuid_string_t>.size

    // get some ram

    let uuidPointer = UnsafeMutablePointer<UInt8>.allocate(capacity: uuidSize)
    let uuidStringPointer = UnsafeMutablePointer<Int8>.allocate(capacity: uuidStringSize)

    // do the work in C

    uuid_generate_time(uuidPointer)
    uuid_unparse(uuidPointer, uuidStringPointer)

    // make a Swift string while we still have the C stuff

    let uuidString = NSString(utf8String: uuidStringPointer) as? String

    // avoid leaks

    uuidPointer.deallocate(capacity: uuidSize)
    uuidStringPointer.deallocate(capacity: uuidStringSize)

    assert(uuidString != nil, "uuid (V1 style) failed")
    return uuidString ?? ""
}

这篇关于Swift3 中的 UUID,但“版本 1"样式 UUID的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆