2015-12-02 107 views
0

我試圖在swift中實現PeerTalk框架。 獲取這類當MAC是給我的數據:dispatch_data_t轉換爲nsstring

public class PTData : NSObject { 
public var dispatchData: dispatch_data_t! { get } 
public var data: UnsafeMutablePointer<Void> { get } 
public var length: Int { get } 

}

人們會認爲,一個簡單的轉換和nil檢查將做到:PTData類型的

if payload != nil { 
     let databis = NSData(bytesNoCopy: payload.data, length: payload.length, freeWhenDone: false) 
     let data = NSData(contentsOfDispatchData: payload.dispatchData) 
     let str = NSString(data: data, encoding: NSUTF8StringEncoding) 
     let strbis = NSString(data: databis, encoding: NSUTF8StringEncoding) 
     print("data is receive") 
     print(str) 
     print(strbis) 
    } 

有效載荷的存在!如前所述。 無我試過的方法,努力讓我的字符串返回,我得到這個:

數據接收

可選()

任何想法?

回答

0
let strbis = NSString(data: databis, encoding: NSUTF8StringEncoding) 

返回一個可選類型的NSString?

所以,你應該寫類似:

if payload != nil { 
    let databis = NSData(bytesNoCopy: payload.data, length: payload.length, freeWhenDone: false) 
    let data = NSData(contentsOfDispatchData: payload.dispatchData) 
    let str = NSString(data: data, encoding: NSUTF8StringEncoding) 
    let strbis = NSString(data: databis, encoding: NSUTF8StringEncoding) 
    print("data is receive") 
    if str != nil { 
     print(str!) 
    } 
    if strbis != nil { 
     print(strbis!) 
    } 
} 
+0

的問題是不是這裏的optionnal但事實optionnal是空的,而不是零,但與實際上沒有數據。 –

+0

您是否檢查過「payload.dispatchData」的內容? – AncAinu

+0

說到這一點,真的很奇怪的是,有時,如果我打印數據+字符串,字符串顯示正確,我不明白髮生了什麼。 –