2016-12-26 3 views
4

에 나는 도심했다 스위프트 2을 만드는 방법을 설명하는 소스의 많은이 위치 :스위프트 3에서 데이터를 Int로 변환하는 방법?

var value: Int = 0 
let data: NSData = ...; 
data.getBytes(&value, length: sizeof(Int)) 

그럼 난 업데이트 구문/이름 때문에 스위프트 3 :

var value: Int = 0 
let data: NSData = ...; 
data.copyBytes(to: &value, count: MemoryLayout<Int>.size) 

그럼에도 불구하고 작동하지 않습니다. 컴파일러는 value 유형을 좋아하지 않으며 UInt8이어야한다고 말합니다. 하지만 나는 Int을 원한다. 아무도 어떻게 이걸 얻을 수 있을지 몰라?

+1

주 깨지기입니다. 다른 "엔디안 유형"을 가진 플랫폼간에 값을 교환하려고하면 잘못된 결과가 발생합니다. iOS 장치, Mac 및 Windows PC는 모두 little-endian이지만 다른 하드웨어는 big-endian입니다. –

+2

[왕복 여행 번호 유형/데이터] (http://stackoverflow.com/questions/38023838/round-trip-swift-number-types-to-from-data)를보십시오. –

+0

고마워. 나는 너의 요점에주의를 기울일 것이다. –

답변

4

어쩌면이 같은 시도 : int 형으로 원시 데이터를 복사

var src: Int = 12345678 
var num: Int = 0 // initialize 

let data = NSData(bytes: &src, length: MemoryLayout<Int>.size) 
data.getBytes(&num, length: MemoryLayout<Int>.size) 
print(num) // 12345678 
+1

빠른 답변 주셔서 감사합니다. 나는 이것을 시도했다.''getBytes (_ : length :) '는'copyBytes (to : count :) '로 이름이 변경되었다. 같은 시간에 놀이터에서 작동합니다. 이상한. –

+0

예, 이상합니다. Xcode의 어떤 버전을 사용하고 있습니까? 저는 8.2 버전이고 문제없이 컴파일됩니다. 나는 코드를 복사 할 때'Int' 대신'NSInteger'를 사용했지만 효과가 있는지 의심 스럽다. –

+0

광산은 8.1입니다. 프로젝트에서 당신에게 효과가 있습니까? –

관련 문제