2014-09-03 2 views
1

수정 된 인코딩 된 UUID를 만드는 데 관심이 있지만 올바른 형식을 얻는 데 시간이 많이 걸리고 있습니다. 내가 현재 가지고있는 것은 알 수없는 이유 때문에 컴파일되지 않지만 놀랍도록도 놀이터에서 실행할 수 있습니다. 함수는 다음과 같습니다.Swift에서 수정 된 Base64 인코딩 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 
} 

문제는 함수의 두 번째 줄에 표시됩니다. 데이터 값의 생성. 이상하게도 그 라인은 놀이터에서 작동합니다. 어떤 도움을 주시면 감사하겠습니다. 그래서 나는 무엇을 여기에서 놓치고 있냐?

미리 감사드립니다.

+0

어쨌든 내가 –

답변

3

당신은 내가 데이터 객체에 uuid_t 형식을 변환하여 NSUUID을 사용하지 않고이 작업을 수행 할 수 있었다

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)) 
+0

을 두려워 많은 감사 : 여기에 내가 만든 UUID 확장입니다. –

0

NSUUID에서 NSData 개체를 만들 수 있습니다. 이 유형은 16 바이트 튜플의 별칭입니다. 구현에 약간 이상하게 보일 수도 있지만 작동하지만, 어떤 이유로 uuid_t 유형이 변경되면 이는 상당히 미래의 증거입니다. 작동 안

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 
} 

}