2016-08-18 5 views
1

내가 베타를 엑스 코드 8 스위프트 3 C API를 변환하려고 엑스 코드 8 베타 3까지, 그것으로 스위프트와 함께 잘 작동했다 C API를 마이그레이션 8 베타 6

int payloadSize = 100 
char tempBuffer[payloadSize]; 
memset(tempBuffer, 7, payloadSize); 

// Construct the payload. 
NSData *payload = [[NSData alloc] initWithBytes:tempBuffer length:payloadSize]; 

6.

:

let payloadSize = 100 
var tempBuffer:[CChar]? 
memset(&tempBuffer, 7, Int(payloadSize)) 

// Construct the ping packet. 
let payload:NSData = NSData(bytes: tempBuffer!, length: Int(payloadSize)) 

최신 Xcode 베타 릴리스에서는 충돌이 발생합니다.

+1

충돌은 무엇을 말하는가? –

+0

그 전에 순수한 기회 (또는 불운 :)로 작업 한 경우 - 'tempBuffer'는 값을 할당하지 않은 선택 항목입니다. –

+0

그냥 충돌, 아무것도 말합니다. 'NSData' 객체를 생성하는 동안 충돌이 발생합니다. Xcode 8 베타 6에서 작업. –

답변

1

문제는 var tempBuffer:[CChar]?입니다. 이는 tempBuffer이라는 변수의 선언입니다. 유형은 Optional<Array<CChar>>입니다. 그러나 그 배열을 정의하지는 않습니다. memset 시도 할 때 할당 된 메모리가 없기 때문에 작동하지 않습니다. 대신 memset를 사용

, 대신이 시도 :

let payloadSize = 100 
let buffer = [UInt8](repeatedValue: 7 count: payloadSize) 

let payload = NSData(bytes: buffer, length: buffer.count) 
+0

다음은 신속한 2.2 버전 및 이전 xcode 베타 버전에서 어떻게 작동합니까? 3. 실제 라이브러리 https://github.com/ankitthakur/SwiftPing을 체크 아웃하십시오. 나는 그것을 XCode 8 Beta 6으로 업그레이드 할 것입니다. –

+0

그것은 단지 지금 막 일어난 결정 론적 문제 일 것입니다. – Alexander

+0

그래, 고마워. C 수준의 API 통합/마이그레이션은 실제로 고통스런 일입니다. –

관련 문제