我有那个代码
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
}
注意:我不会讲Swift。以下代码可能无法编译,但应为您提供背后的主要思想/逻辑。
问题是因为存在NSData
不完整的情况(假设您确实可以NSString
根据所使用的编码将字节真正转换为字节,因此您需要逐个接收它们,并且缓冲区大小可能不足以一次处理完整的响应),如@zaph所指出的那样。
。简单示例:例如,将aUIImage
转换为NSData
使用UIImageJPEGRepresentation()
,然后尝试NSString
使用所需的编码将其转换为,这可能无效,或者对视频流也是如此。
我们的情况的示例:
完全有效的“字符”:“ 1001”,不带“ 10”或“ 01”的内容。 您只收到“ 10”。如果将其转换为NSString
,则为nil,因为它无效。 然后,您收到“ 01”。如果将其转换为NSString
,则为nil,因为它无效。因此,NSData
在将其转换为之前,您必须先阅读所有内容NSString
。
因此,在开始时,您可以创建一个。var finalData = NSMutableData.init()
然后,每次读取缓冲区时,请执行以下操作:
var partialData = NSData.init(bytes: data, length: data.count)
finalData.appendData(partialData)
最后,只需转换finalData
为String
:
if let str = String(data:finalData, encoding: NSUTF8StringEncoding) {
response = str
}
问题内容: 我最近一直在编写与iPhone交互的Web应用程序。iPhone iphone实际上将以plist的形式将信息发送到服务器。因此,看到类似…的情况并不少见。 现在,我知道此数据已以某种方式进行了哈希/加密。当我使用编辑器(“属性列表编辑器”)打开plist时,它向我展示了一种更加“易于阅读”的格式。例如,上面的数据将被转换为… 知道转换的方法是什么吗?主要是我希望将其放入Java St
问题内容: 我在Swift 中将元素转换为,然后将变量转换回时遇到了问题。 首先,我想提取以下JSON数据的元素: 放入NSData 变量,但似乎无法做到这一点。我用来解析如下: 但这给了我一个ScalarNumber数组,我不知道如何存储到一个对象中。 其次,我想从同一个对象生成回来: 但是NSData 对象不会转换为[-67,51,-38,61,-72,102,48],它只是使JSON字符串无
问题内容: 我正在尝试将转换为,而我的代码如下: 控制台会打印如下内容: 的是,我不知道这里有什么问题。 之后,我尝试像这样进行排序: 和控制台打印: 一切正常。 那么,有人可以告诉我我的第一个案例有什么问题吗? 问题答案: 正如Martin R所建议的,我看到了这篇文章,并将那个Objective- C代码转换为swift并且得到了以下代码: 并且这正常工作。 对于Swift 3.0:
问题内容: 我发现了一些奇怪的异常: 怎么可能呢?每个对象都可以转换为String,不是吗? 代码是: 谢谢。 问题答案: 为什么这不可能: 因为String和Integer不在同一对象层次结构中。 您尝试的转换仅在相同的层次结构中有效,例如 在这种情况下,或或将起作用。 因此,正如其他人已经提到的,要将整数转换为字符串,请使用: 或对于原始 要么 为对象。
问题内容: 我正在开发一些应用程序,它允许从SD卡中选择图像,将其保存到数据库中并为ImageView设置此值。我需要知道将uri转换为字符串并将字符串转换为uri的方法。现在,我使用了Uri的getEncodedPath()方法,但是例如,此代码不起作用: 因此,我不知道如何将Uri保存到数据库中并根据保存的值创建新的Uri。请帮我修复它。 问题答案: 我需要知道将uri转换为字符串并将字符串转
问题内容: 如何从float转换为string或从string转换为float? 在我的情况下,我需要在2个值字符串(我从表中获得的值)和我计算出的浮点值之间进行断言。 我尝试从浮动到字符串: 但是断言失败 问题答案: 使用Java的类。 为了进行比较,将字符串转换为float并比较两个float总是更好。这是因为对于一个浮点数,存在多个字符串表示形式,与字符串相比,它们是不同的(例如“ 25”!