繁体   English   中英

如何在 Swift 中创建修改后的 Base64 编码的 UUID?

[英]How can I create a modified Base64 encoded UUID in Swift?

我对创建一个经过修改的编码 UUID 很感兴趣,但我很想获得正确的格式。 由于未知原因,我目前拥有的无法编译,但奇怪的是我能够在操场上运行它。 这是函数:

class func genID() -> String {
  let uuid = NSUUID.UUID()
  let data = NSData(bytes:&uuid, length:16)
  let base64 = data.base64EncodedStringWithOptions(nil)
  let options = NSStringCompareOptions.LiteralSearch
  let result = base64
    .stringByReplacingOccurrencesOfString("/", withString: "-", options: options, range: nil)
    .stringByReplacingOccurrencesOfString("+", withString: "_", options: options, range: nil)
    .stringByReplacingOccurrencesOfString("=", withString: "", options: options, range: nil)
  return result
}

问题被标记在函数的第二行; 数据价值的创造。 奇怪的是,这条线确实在操场上工作。 任何帮助,将不胜感激。 那么我在这里错过了什么?

提前致谢。

您可以从NSUUID创建一个NSData对象

let uuid = NSUUID.UUID()
// data object with appropriate size:
let data = NSMutableData(length: 16)
// fill the bytes from the UUID:
uuid.getUUIDBytes(UnsafeMutablePointer(data.mutableBytes))

通过将 uuid_t 类型转换为 Data 对象,我能够在不使用 NSUUID 的情况下做到这一点。 此类型是 16 字节元组的别名。 在实现中看起来有点奇怪,但它可以工作,如果由于某种原因 uuid_t 类型发生变化,这是相当未来的证明。 这是我创建的 UUID 扩展:

import Foundation

extension UUID {
    var base64String: String {
        return self.data.base64EncodedString()
    }

    var data: Data {
        var result = Data()
        let uuidTuple = self.uuid
        // NOTE: There are clever ways to iterate over a tuple in Swift,
        // but I actually want this to not compile if the implementation of uuid_t
        // changes in the future
        result.append(uuidTuple.0)
        result.append(uuidTuple.1)
        result.append(uuidTuple.2)
        result.append(uuidTuple.3)
        result.append(uuidTuple.4)
        result.append(uuidTuple.5)
        result.append(uuidTuple.6)
        result.append(uuidTuple.7)
        result.append(uuidTuple.8)
        result.append(uuidTuple.9)
        result.append(uuidTuple.10)
        result.append(uuidTuple.11)
        result.append(uuidTuple.12)
        result.append(uuidTuple.13)
        result.append(uuidTuple.14)
        result.append(uuidTuple.15)
        return result
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM