2015-12-02 105 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

说到这一点,真的很奇怪的是,有时,如果我打印数据+字符串,字符串显示正确,我不明白发生了什么。 –