2017-12-04 22 views
0

신속하게 처음으로 CommonCrypto (https://github.com/sergejp/CommonCrypto의 도움으로)를 사용하려고합니다.Swift - 'UnsafePointer <Any>'유형의 값을 예상 인수 유형 'UnsafePointer <_>'으로 변환 할 수 없습니다.

UnsafeRawPointer(ivData!.withUnsafeBytes 
{(pointer) -> UnsafePointer<Any> in 
    let ivBuffer = pointer 
}) 

오류는 다음과 같습니다 :

예상 인수 유형 유형의 값 'UnsafePointer을'변환 할 수 없습니다 'UnsafePointer < _>'

을 무엇 여기 내 코드입니다 <_> 의미? 내가 무엇을해야 하나? 감사.

+0

유형. 을 삭제해야한다고 생각합니다. 그 이상으로 문맥으로 더 많은 코드를 알기가 어렵습니다. –

+0

'일반 타입에 대한 참조'를 할 때 또 다른 오류가 발생합니다. UnsafePointer '에 인수가 필요합니다. '되돌리라고 말하면 – ewizard

답변

3

불평하고있는 pointer입니다. 당신은 그것을 캐스팅해야합니다. 다음은 사용 예, MD5 해시 생성의 일부 :

var rawBytes = [UInt8](repeating: 0, count: Int(CC_MD5_DIGEST_LENGTH)) 
    let _ = data.withUnsafeBytes { (bytes: UnsafePointer<UInt8>) in 
     CC_MD5(bytes, CC_LONG(data.count), &rawBytes) 
    } 
+0

감사합니다 .... rawBytes는 항상'UInt8'으로 캐스팅 할 수 있습니다. ? AES 암호화를 수행 중입니다 – ewizard

+0

원하는대로 캐스팅 할 수 있습니다. 명확하게하기 위해, 당신이 그것을 던져야하는 이유는 당신이 그것을 돌려주기 때문이며,'preBuffer'는 당신이 그것을 던져 넣는 어떤 타입이든 될 것입니다. https://stackoverflow.com/questions/37680361/aes-encryption-in-swift에서 '데이터'를 사용하여 Swift 3 답변을 살펴보면 사용 방법에 대한 더 많은 정보를 얻을 수 있습니다. – Don

+0

사이드 노트 :'if let' 또는'guard let' 구조체를 사용하여 force-unwrap 연산자'!'를 사용하지 않는 것이 좋습니다. Colloquially, '!'는 "충돌 운영자"로 알려져 있습니다 – Don

0

이 내 상황에서 그것을 할 필요가 어떻게 자사 당신이 가진 UnsafePointer에 유형 UnsafePointer을 변환 할 수 없다는

let preBuffer = ivData!.withUnsafeBytes { (bytes: UnsafePointer<UInt8>) in 
    return bytes 
} 
let ivBuffer = UnsafeRawPointer(preBuffer)