swift 为 NSStream 创建字节缓冲区持有者

2024-01-11

in the Ray Wenderlich 套接字教程 http://www.raywenderlich.com/3932/networking-tutorial-for-ios-how-to-create-a-socket-based-iphone-app-and-server为了从 Objective-C 中的输入流读取字节,我们做了

uint8_t buffer[1024];
        int len;

        while ([inputStream hasBytesAvailable]) {
            len = [inputStream read:buffer maxLength:sizeof(buffer)];
            if (len > 0) {

                NSString *output = [[NSString alloc] initWithBytes:buffer length:len encoding:NSASCIIStringEncoding];

                if (nil != output) {
                    NSLog(@"server said: %@", output);
                }

在 Swift 中我尝试了以下方法但没有取得太大成功

        if (stream == inputStream) {
//            var buffer = Array<UInt8>(count: 1024, repeatedValue: 0)
            var buffer : UnsafeMutablePointer<UInt8>
            var len : Bool

            while (inputStream?.hasBytesAvailable == true) {
                len = inputStream?.getBuffer(buffer, length: sizeofValue(buffer))

                if (len) {
                    var output = String(NSString(bytes: buffer, length: sizeofValue(buffer), encoding: NSASCIIStringEncoding))

                }
            }
        }

您可以使用Array<UInt8>作为缓冲区并按原样传递记录在使用 Swift 与 Cocoa 和 Objective-C 中 https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/BuildingCocoaApps/InteractingWithCAPIs.html#//apple_ref/doc/uid/TP40014216-CH8-XID_15:

let bufferSize = 1024
var buffer = Array<UInt8>(count: bufferSize, repeatedValue: 0)

let bytesRead = inputStream.read(&buffer, maxLength: bufferSize)
if bytesRead >= 0 {
    var output = NSString(bytes: &buffer, length: bytesRead, encoding: NSUTF8StringEncoding)
} else {
    // Handle error
}

-[NSInputStream read:maxLength:]返回一个数字,指示读取了多少字节(如果 >= 0)或是否存在错误(如果为负)。您应该相应地检查返回值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

swift 为 NSStream 创建字节缓冲区持有者 的相关文章

  • Swift 中计算只读属性与函数

    在 Swift WWDC 简介会话中 只读属性description被证明 class Vehicle var numberOfWheels 0 var description String return numberOfWheels wh
  • 使用 PDFOutline 将 TOC 添加到 Swift/Cocoa 中的 PDFDocument

    我正在开发一个小程序 将多个单页 PDF 合并到一个多页 PDF 中 我正在 Swift4 MacOS Cocoa 中工作 但我一生都无法在 Swift 中找到任何类型的示例来创建大纲 仅遍历现有的大纲 我对此非常熟悉 使用对文档的最佳猜测
  • 使用未声明的类型“对象”

    这太奇怪了 通常我可以理解未声明的类 但这是声称 Object 类本身未声明 NSObject 可以工作 但我的项目设置方式我需要它是一个纯 Swift 对象 我的类标题如下所示 import UIKit import Foundation
  • 在 Swift UI 中为文本添加动画

    怎么可能动画化Text or TextField来自 Swiftui 的意见 我所说的动画是指 当文本发生变化时 它会 计数 例如 给定一些标签 如何创建一个动画 当我将标签文本设置为 100 时 它会从 0 上升到 100 我知道这在 U
  • UITextfield 键盘只有字母,没有数字,没有大写字母,没有空格键?

    我希望 UITextfield 的键盘只有 a z 没有数字 没有特殊字符 并且没有大写字母 基本上我想要一个只有字母的键盘 我已经能够禁用该空间了 有人知道如何禁用数字 特殊字符和大写字母吗 解决这些问题中的任何一个都很棒 对所有角色执行
  • Swiftui 应用程序在 iOS 14 / 15 上使用不同的 SearchBar (ViewModifier) 时崩溃

    我在 iOS 14 上使用 SwiftlySearch 在 iOS 15 上使用 searchable struct CompatibleSearchBarModifier ViewModifier Binding var text Str
  • 重新定位时 Mapbox 默认的 compassView 会给出奇怪的结果

    我遇到一种情况 必须将地图框罗盘视图重新定位到不同的位置 当我以其他点作为其 compassView 轴旋转地图时 compassView 现在正在旋转 并给了我一个奇怪的结果 附截图 黑色mapBox默认罗盘图标是旋转的 参考截图 这是
  • 无法将 (Timer!) -> Void 转换为 ((CFRunLoopTimer?) -> Void)! - 将 NSTimer 扩展转换为 Swift 3

    我正在尝试将我在项目中使用的 Pod 转换为 Swift 3 它不是我编写的 但原作者尚未更新它 所以我将它分叉为我自己尝试的任何内容 但 我在尝试将扩展名转换为NSTimer到斯威夫特 3 Cannot convert value of
  • iOS swift 应用程序启动时出现黑屏

    我有个问题 当我启动我的应用程序时 会看到黑屏几秒钟 然后出现启动屏幕 我的启动画面不是默认的 我使用了视图控制器 因为我的启动画面有一个动画 我搜索了一个解决方案 我得到了这个 在我的闪屏加载 iPhone 之前出现黑屏 https st
  • 根据图像制作具有 UIImageView 高度的 UICollectionViewCells

    我想做一个UICollectionView单元格的宽度是屏幕的宽度 但高度取决于单元格的宽高比UIImageView inside 在我目前的实施中 所有UICollectionViewCell实例是正方形 这不是我想要的 我想以某种方式使
  • 如何修复C风格的for语句?

    什么是正确的修复方法C 风格的 for 语句对于下面发布的代码 目前我正在交战 C 风格的 for 语句已弃用 并将在将来删除 斯威夫特的版本 var ifaddr UnsafeMutablePointer
  • iOS 上每个选项的带有图像的操作表

    有没有办法在 iOS 上将图像添加到操作表中 与苹果在应用程序商店或苹果音乐应用程序上所做的一样 我对苹果文档的基本搜索表明我没有在操作表中子类化或添加子视图 UIActionSheet 并非设计为子类化 也不应向其层次结构添加视图 苹果文
  • Swift 中的弹出视图

    我有一个弹出视图 没有选项卡栏 它弹出到带有选项卡栏的视图控制器 在带有选项卡栏的视图控制器中 我设置了一个单击按钮 以便弹出视图控制器 IBAction func PopUpClicked sender UIButton gt Void
  • 如何在 Swift 中使用 substringToIndex? [复制]

    这个问题在这里已经有答案了 我在这一行收到编译器错误 UIDevice currentDevice identifierForVendor UUIDString substringToIndex 8 类型 String Index 不符合协
  • iOS Swift 检测键盘事件

    我能以某种方式检测来自 iOS 键盘的事件吗 我想检测此类事件UIViewController哪个没有UITextField或任何此类物体 我只有四个圆圈UIView我想在按下键盘上的按钮时将它们涂成不同的颜色 您没有任何对象可以从键盘获取
  • Firebase 连接管理器应仅返回一个结果

    我正在关注位于以下位置的文档 https www firebase com docs ios guide offline capability html section connection state https www firebase
  • Swift -boundingBox 导致 EXC_BAD_ACCESS (代码 = 1)

    我正在使用 SceneKit 来显示文本节点 这是我的代码 foo swift extension SCNNode func getNodeSize gt width Float height Float let min max bound
  • swift 中的负数模

    负数模如何在 swift 中工作 当我执行 1 3 时 它给出 1 但余数是 2 其中有什么问题 雨燕余数运算符 计算余数 整数除法 a b a a b b where 是截断整数除法 在你的情况下 1 3 1 1 3 3 1 0 3 1
  • 如何在 EKRecurrenceRule 中设置一周中某一天的数组?

    我想在用户选择的特定日期每周添加事件 可以是一个或多个 也可以是一整天 我将用户选择的日期值存储在模型类变量中 但是 当我添加事件并选择日期时 假设今天是星期一 我选择星期二和星期三并保存 然后我查看周一和周三添加的 iPhone 日历 我
  • 通用类不会将委托调用转发给具体子类

    鉴于以下情况 protocol EntityType var displayString String get extension String EntityType var displayString String return self

随机推荐

  • 22秒是在mysql中插入500行的好时间吗?

    以下 php 脚本的执行时间约为 22 秒 正常吗 如果不是的话 什么会导致它执行缓慢 conn mysql connect localhost root 123 mysql select db mydb conn time1 time f
  • Google Cloud HTTP 平衡器和 gzip

    当我使用 Google Cloud Network Load Balancer 时 所有 HTTP gzip 连接都保持不变 但是当使用 HTTP S 负载均衡器时 最终用户无法获得 gzip 压缩的内容 我在虚拟机上使用 nginx 使用
  • 读取 XML 文档时如何使用 XComment?

    我正在使用以下行读取 XML 文档 该文档可能有也可能没有一些用 括起来的注释 靠近我的 XML 文件的顶部 XDocument xe1 XDocument Load filepath 如何读取评论并将其存储为字符串 我正在 MS Visu
  • 调试前运行批处理脚本

    我想每次在启动程序进行调试之前运行批处理脚本 对于构建事件 此类功能是使用预构建事件 构建后事件来实现的 对于实际调试 我找不到任何预调试 调试后事件 如何实现这个场景呢 我正在使用 VS2008 net Framework 3 5 C 应
  • Bootstrap 4:隐藏卡片文本中的溢出

    我有一张 bootstrap 4 卡 我想在其中隐藏字幕的溢出 并显示 我怎样才能实现这个目标 如果可能的话使用纯引导代码 div class card block p 1 p class card title Test object p
  • 解释 R Taply 描述

    我理解tapply 在R中的作用 但是 我无法从文档中解析它的描述 Apply a Function Over a Ragged Array Description Apply a function to each cell of a ra
  • 为什么括号中的字符串不只用该字符串创建一个元组? [复制]

    这个问题在这里已经有答案了 我在使用 Python 线程和在参数中发送字符串时遇到问题 def processLine line print hello return dRecieved connFile readline processT
  • bootstrap 导航栏可折叠无法使其工作

    我正在开发一个 Angularjs 应用程序 我想使其成为多平台 因此我正在尝试使用 Bootsrap 我找到了一个我想要遵循的模板 https blackrockdigital github io startbootstrap busin
  • Windows XP 上的 XamlParseException

    我有一个 WPF 应用程序 它在 vista 7 上运行得很好 但在 Windows XP 上它会抛出 System Windows Markup XamlParse 错误 这非常令人沮丧 因为我的应用程序中有很多控件 但我不这样做不知道是
  • 线程安全的多文件写入

    我有一个守护进程 它接受套接字连接并读取或写入一组动态文件 具体取决于连接的性质 因为我的守护进程是多线程的 所以存在同一个文件可能被多个线程写入的可能性 因为我的文件列表是动态的而不是固定的 所以我不确定如何防止一个线程碰撞另一个线程 出
  • 在多个 return 语句的情况下,使用 `std::move` 返回是否明智?

    我知道返回通常不是一个好主意std move i e bigObject foo bigObject result return std move result 而不是简单地 bigObject foo bigObject result r
  • 列数与计数器列性能

    我想知道获取特定列族中的列数的最佳方法是什么 我可以直接获取列数 但我不确定这是否是有效的解决方案 另一方面 我可以维护另一个列族 其中包含一个包含列数的计数器列 您有遇到类似问题的经验吗 http wiki apache org cass
  • Fortran函数解释

    我在 Fortran 中有这个函数 我正在尝试用 C 重新编码它 C C FUNCTION POLY C FUNCTION POLY N A X DIMENSION A N C POLY 0 L N DO 1 K 1 N POLY POLY
  • java.util.MissingResourceException:找不到基本名称消息的包,区域设置 en_US

    我是 JSF 的新手 正在尝试这段代码 这是我的 faces config xml
  • 如何动态更新Nifi中的variable.registry.properties?

    变量注册表属性是 Nifi 添加的一项功能 旨在促进软件开发生命周期 这意味着您可以在单独的开发环境中开发流程 并利用 nifi variable registry properties 属性中指定的自定义属性文件以及表达式语言来使用处理器
  • 如何对过滤后的 html 表求和?

    我有一个 HTML 表 我可以使用 jquery 过滤它 在表格的底部 我想要一个 总计 行 它将显示的所有值相加 总计 行中显示的总和应该是显示的所有行的总和 即不考虑隐藏行 我尝试添加一个条件 例如使求和取决于行的显示样式 但这没有成功
  • 为什么当 args 是序列时 subprocess.Popen 不起作用?

    当 args 参数作为序列给出时 我遇到了 subprocess Popen 问题 例如 import subprocess maildir home support Maildir 这有效 它打印 home support Maildir
  • 使用“optparse”模拟 Python 脚本的命令行参数?

    我想使用的 Python 脚本 称为snakefood http furius ca snakefood doc snakefood doc html 通常从命令行运行并采用命令行参数 例如 sfood path to my project
  • 如何指定 unicode 字符范围

    如何指定 Unicode 字符范围 空格 到 u00D7FF 我有一个正则表达式 例如r u0020 u00D7FF 并且它不会编译说这是一个糟糕的范围 我是 Unicode 正则表达式的新手 所以以前没有遇到过这个问题 有没有办法让这个编
  • swift 为 NSStream 创建字节缓冲区持有者

    in the Ray Wenderlich 套接字教程 http www raywenderlich com 3932 networking tutorial for ios how to create a socket based iph