[英]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.