当前位置: 首页 > 面试题库 >

在Swift 3中将数据写入NSOutputStream

裘安阳
2023-03-14
问题内容

这个问题的解决方案不再适用于Swift 3。

不再有一个属性bytesData(前身NSData

let data = dataToWrite.first!
self.outputStream.write(&data, maxLength: data.count)

有了这段代码,我得到了错误:

Cannot convert value of type 'Data' to expected argument type 'UInt8'

你怎么能写DataNSOutputStream斯威夫特3?


问题答案:

NSData具有bytes访问字节的属性。DataSwift 3中的新值类型具有一个withUnsafeBytes()
方法,该方法调用带有指向字节的指针的闭包。

因此,这就是您写入Data的方式NSOutputStream (不强制转换为NSData):

let data = ... // a Data value
let bytesWritten = data.withUnsafeBytes { outputStream.write($0, maxLength: data.count) }

备注: withUnsafeBytes()是通用方法:

/// Access the bytes in the data.
///
/// - warning: The byte pointer argument should not be stored and used outside of the lifetime of the call to the closure.
public func withUnsafeBytes<ResultType, ContentType>(_ body: @noescape (UnsafePointer<ContentType>) throws -> ResultType) rethrows -> ResultType

在上述调用中,两者ContentTypeResultType都是由编译器自动推断的(as
UInt8Int),从而UnsafePointer()无需进行其他 转换。

outputStream.write()返回实际写入的字节数。通常,您应该 检查
该值。可能是-1写入操作失败,还是少于data.count写入带有流控制的套接字,管道或其他对象时的失败。



 类似资料:
  • 问题内容: 在我们的应用程序中,我们希望用户输入如下: 我想在单元测试中通过该部分,以便我可以恢复线程以执行其余代码。我如何从junit 写入内容? 问题答案: 你想要做的是使用的方法从。这将使您可以从junit 传递数据。

  • 问题内容: 我知道类似的问题已经问过很多次了,但是严重的是我无法正确实现在csv中正确编写的csv编写器(它显示了垃圾)。 我正在尝试使用UnicodeWriter,如官方文档中所述。 这不会给我任何解码或编码错误。但是它写的是哪个不好。有人可以帮我在这里做错什么吗? 问题答案: 您正在以UTF-8格式写入文件,但未在csv文件中指明该文件。 您应该在文件的开头写入UTF-8标头。添加: 然后,您

  • 问题内容: 我跟随本文将一些数据发送到AWS ES,并使用了jar elasticsearch-hadoop。这是我的脚本: 然后运行以下命令行: 其中write_to_es.py是上面的脚本。 这是我得到的错误: 如何解决这个问题: 任何帮助或建议,我们将不胜感激。 问题答案: 我有同样的问题。 看完这篇文章,我找到了答案!!! 您必须像这样转换为Type:

  • 问题内容: 我希望我的问题不会很荒谬,因为令人惊讶的是,就流行的网站而言(据我所知)显然还没有真正问过这个问题。 情况是我有几个csv文件,总共包含1个以上的Mio观测值。每个观察结果都包含一个邮政地址。我打算将所有文件读入一个GeoDataFrame中,对地址进行地理编码,在给定shapefile的情况下执行空间连接,并为每行保存来自多边形的一些信息。我想是相当标准的。这是一次性数据清理过程的一

  • 我正在使用Apache Spark生成拼花文件。我可以按日期划分它们,没有问题,但在内部我似乎无法按正确的顺序排列数据。 在处理过程中,顺序似乎丢失了,这意味着拼花地板元数据是不正确的(具体来说,我想确保拼花地板行组反映排序顺序,以便特定于我的用例的查询可以通过元数据有效地过滤)。 考虑以下示例: 使用这种方法,我确实得到了正确的拼花地板分区结构(按日期)。更好的是,对于每个日期分区,我看到一个大

  • 我设法将数据插入身份验证,但无法插入数据库: 代码: 错误: E/AndroidRuntime:致命异常:主进程:com。实例budgetingapp,PID:11507 java。lang.RuntimeException:在类androidx上找到了名称getText的冲突获取程序。appcompat。小装置。AppCompativeText位于com。谷歌。火基。消防商店。util。Cust