我有一個代碼爲什麼不將工作從NSData轉換爲字符串?斯威夫特
func SendRequest(request: String) -> String
{
var response = ""
var (success, errmsg) = client.connect(timeout: 1)
if success
{
var (success, errmsg) = client.send(str: request + "\n")
if success
{
while(true)
{
var data = client.read(10240*10)
if (data == nil)
{
break
}
var bytes = NSData.init(bytes: data!, length: data!.count)
var str = String.init(data: bytes, encoding: NSUTF8StringEncoding)
if str != nil{
response += str!
}
}
}
else
{
print(errmsg)
}
}
else
{
print(errmsg)
}
return response
}
有時候,投NSData
到String
不起作用。當我print(str)
我看到nil
。這是爲什麼發生?我使用GitHub中的SwiftSocket庫。對不起我的英語不好。
發生這種情況時,我的服務器發送大JSON
字符串。例如 - 如果我收到一個消息對象(我的課程) - 一切都會正常工作。但是,如果我收到了4,5,6,...消息的對象(我的課程) - 這有時會起作用。 MAGIC :(
新的代碼版本
func SendRequest(request: String) -> String
{
var response = ""
var bigData: [UInt8] = []
var (success, errmsg) = client.connect(timeout: 1)
if success
{
var (success, errmsg) = client.send(str: request + "\n")
if success
{
while(true)
{
var data = client.read(1024*10)
if (data == nil)
{
break
}
bigData.appendContentsOf(data!)
}
}
else
{
print(errmsg)
}
}
else
{
print(errmsg)
}
var bytes = NSData.init(bytes: bigData, length: bigData.count)
if let str = String(data: bytes, encoding: NSUTF8StringEncoding) as String? {
print(str)
response = str
}
return response
}
有時數據可能比一個字符串更復雜,可能需要被轉換爲NSArray或NSDictionary嘗試添加此 – SeanLintern88
我只收到來自我的服務器的JSON字符串 - 這是「比字符串更復雜」? –
檢查'bytes'不是'nil'。 –