首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

未调用StreamDelegate的Swift 4 NSObject类

是指在Swift 4中,继承自NSObject的类没有调用StreamDelegate协议的方法。

StreamDelegate是一个协议,用于处理与流相关的事件和数据。它定义了一些方法,如stream(:handle:)和stream(:handleError:), 用于处理流的读取和写入操作,以及处理错误。

在Swift 4中,如果一个类继承自NSObject并且需要处理流相关的事件和数据,就需要遵循StreamDelegate协议,并实现相应的方法。如果未调用StreamDelegate协议的方法,可能会导致流的读取和写入操作无法正常进行,或者无法正确处理错误。

以下是一个示例代码,展示了如何在Swift 4中使用StreamDelegate:

代码语言:swift
复制
import Foundation

class MyStreamDelegate: NSObject, StreamDelegate {
    func stream(_ aStream: Stream, handle eventCode: Stream.Event) {
        // 处理流相关的事件
    }
    
    func stream(_ aStream: Stream, handleError error: Error) {
        // 处理错误
    }
}

// 创建流对象
let inputStream = InputStream(url: URL(string: "https://example.com")!)!
let outputStream = OutputStream(url: URL(string: "https://example.com")!)!

// 设置代理
let delegate = MyStreamDelegate()
inputStream.delegate = delegate
outputStream.delegate = delegate

// 打开流
inputStream.open()
outputStream.open()

// 读取和写入操作...

// 关闭流
inputStream.close()
outputStream.close()

在上述示例中,我们创建了一个自定义的MyStreamDelegate类,它继承自NSObject并遵循StreamDelegate协议。我们将这个代理对象分别设置给输入流和输出流,并实现了相应的方法来处理流相关的事件和错误。

这样,我们就可以通过调用流的open()方法打开流,并进行读取和写入操作。在操作完成后,记得调用close()方法关闭流。

对于Swift 4中未调用StreamDelegate的NSObject类,可以通过遵循StreamDelegate协议并实现相应的方法来解决该问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

iOS学习--NSObject详解

大意是:这个是大多说 Objective-C, 为子类提供了访问运行时系统基本接口,并使子类具有 Objective-C对象基本能力....二、NSObject.h方法分类 1.加载及初始化方法 2.消息发送方法 3.复制方法 4.判断方法 5.内存管理方法 2.1、加载及初始化方法 /** 运行时加载或分类调用该方法, 每个只会调用一次...*/ + (void)load; /** 实例化使用前需要先初始化, 一个调用一次, 如果子类没有实现该方法则会调用方法 */ + (void)initialize; /** 初始化对象...:(NSInvocation *)anInvocation OBJC_SWIFT_UNAVAILABLE(""); /** 获取方法签名, 对象没有找到SELIML时就会执行调用该方法, 可以重写该方法抛出一个函数签名...; } /** 运行时加载或分类调用该方法, 每个只会调用一次 */ + (void)load; /** 实例化使用前需要先初始化, 一个调用一次, 如果子类没有实现该方法则会调用方法

1K20

swift4.0语法杂记(精简版)

如果用KVC方式一定要先调用构造函数。因为系统默认调用是放在方法最后面调用。...封装一个网络请求HttpTool.swift继承自NSObject 用异步线程模拟网络数据请求,再回到主线程中回调闭包 class HttpTool: NSObject { //闭包类型:...,不需要显式为每一个枚举成员设置原始值,swift将会自动它们赋值。...,直到某个值被修改时,这个被修改值才会被拷贝一份并分配内存空间 移除调用协议实现 struct Date { private let secondsSinceReferenceDate:...在 Swift 3 中,编译器会在很多地方为我们隐式加上 @objc,例如当一个继承于 NSObject,那么这个所有方法都会被隐式加上 @objc。

15.2K90

27.Swift学习之与OC混编

Apple给我们做好了“桥接”工作,但是在Objective-C项目中调用Swift与在Swift项目中调用Objective-C,处理方式是不一样,下面来进行一个简单介绍。...一、Objective-C项目中调用Swift 新建一个Objective-CiOS项目 创建一个Swift,继承自NSObject,这时候会有如下提示,此时选择Create Bridging...Swift文件如下: class Person: NSObject { } 在Objective-C中导入头文件,注意此时导入头文件是一个命名为项目名-Swift.h头文件,而不是Bridging...Header文件,该头文件是自动生成并且对开发者透明 在Swift代码中将需要暴露给OC调用属性和方法前加上 @objc修饰符,关于这个内容可查看之前博文 class Person: NSObject...项目中调用Objective-C 新建一个SwiftiOS项目 创建一个Objective-C,此时也会有如一中文字提示,修改文件如下: @interface Person : NSObject

1.2K10

【自问自答】关于 Swift 几个疑问

感觉自己给自己释疑,也是一个极为有趣过程。这次,我还新增了“猜想”一栏,来尝试回答一些暂时没有足够资料支撑问题。 Swift 版本是:4.0.3。不同版本 Swift,可能无法复现问题。...解决方案: 纯Swift没有动态性,但在方法、属性前添加dynamic修饰可以获得动态性。...继承自NSObjectSwift,其继承自父方法具有动态性,其他自定义方法、属性需要加dynamic修饰才可以获得动态性。...4 中, 加 dynamic 同时,也必须加 @objc -- 即不允许单独加 dynamic 标记....猜想: dynamic 是在用性能换灵活性.生产环境下,未来更可能方案,可能是: 通过协议,约定必须实现统计相关方法 --> 通过单元测试,来保证遵循特定统计协议类型,在特定时机一定会调用协议规定统计方法

1.4K60

深入了解 iOS 初始化

当自定义一个时候,要么直接继承自NSObject,要么继承自UIView或者其他。 无论继承自什么,都经常需要新初始化方法,而这个新初始化方法其实就是新指定初始化器。...根据这条规则,可以从NSObject、UIView中看出,由于UIView拥有新指定初始化器-initWithFrame:,导致父NSObject指定初始化器-init退化成便利初始化器。...必须重写旧定初始化器,在里面调用指定初始化器 • 在 Swift 中,初始化时候需要保证(结构体、枚举)所有非可选类型属性都会有值 • 在 Swift 中,必须在初始化完成后才能调用实例属性...,调用实例方法 • 在 Swift 中,如果存在继承,并且子类有新非可选类型属性,或者无法保证所有非可选类型属性都已经有默认值,那么就需要新创建一个指定初始化器,或者重写父指定初始化器,并且在里面调用指定初始化器...,那么就不会继承父指定初始化器和便利初始化器;但是如果重写了父所有指定初始化器,就会继承父便利初始化器 • 在 Swift 中,子类可以把父指定初始化器重写成便利初始化器 • 在 Swift

97710

iOS 多线程-Thread

方法创建线程自动运行,通过这种方式我们无法对 Thread 属性进行一些自定义设置,如name、threadPriority等。...使用 NSObject 拓展方法 这也是使用 Thread 进行线程切换系列方法。...} 继承 Thread Thread 可以进行继承,重写 main 方法,同时不需在 main 方法中调用 main 方法。...就绪:将线程对象添加到可调度线程池,等待 CPU 调用; 运行:CPU 从可调度线程池中选中线程进行调用,当前选中线程为运行状态,选中重新变为就绪状态,此步程序员无法控制,由系统来处理; 堵塞:线程休眠处理...方法 类型 作用 start 实例方法 启动 cancel 实例方法 暂停 exit 方法 取消 sleep 方法 阻塞 补充说明: start thread 调用 start 方法后,其实并不是马上就开始运行了

90520

iOS_Swift函数派发机制

前言: 函数调用机制是程序判断使用哪种途径去调用一个函数机制,即 CPU 在内存中找到该函数地址并调用过程。 了解函数调用机制,对于写出高性能代码来说十分有必要。...大部分语言把这个称之为 Virtual Table 虚函数表,Swift 里称为 Witness Table 。 每个维护一个虚函数表,记录着所有函数。...其他函数:以 Table 机制来查找调用。 2.3 Class - Extension extension 中方法和属性无法继承和重写,只属于当前,所以是静态派发。...@objc:是将是 swift 中 继承自 NSObject 函数暴露给 OC。原理:生成两个函数引用,一个给 swift 调用,一个给 objc 调用。...Performance Optimizing Swift Performance Swift方法调用(Method Dispatch)(一) - 概述 Swift方法调用 Swift方法调用

24220

iOS_Swift函数派发机制

前言: 函数调用机制是程序判断使用哪种途径去调用一个函数机制,即 CPU 在内存中找到该函数地址并调用过程。 了解函数调用机制,对于写出高性能代码来说十分有必要。...大部分语言把这个称之为 Virtual Table 虚函数表,Swift 里称为 Witness Table 。 每个维护一个虚函数表,记录着所有函数。...其他函数:以 Table 机制来查找调用。 2.3 Class - Extension extension 中方法和属性无法继承和重写,只属于当前,所以是静态派发。...@objc:是将是 swift 中 继承自 NSObject 函数暴露给 OC。原理:生成两个函数引用,一个给 swift 调用,一个给 objc 调用。...Performance Optimizing Swift Performance Swift方法调用(Method Dispatch)(一) - 概述 Swift方法调用 Swift方法调用

16210

OC对象原理(二)

因此,对象内存分配原则是,需要给安全填充对象在其内存段最后留出8字节缓冲区域。...接下来介绍一下联合体和位域概念 先来看一个例子: 现在有一个坦克,它有4个属性:向前、向后、向左、向右,如下: @interface NormanTank : NSObject @property...第4位到第36位存储是shiftcls,它是存储指针值。在开启指针优化情况下,在arm64架构中有33位来存储指针。...0x0008c0310000000f (lldb) po 0x00000001074b11d8 NSObject 需要注意是,此时打印出来NSObject是根元,不是根,不信的话,你看下面第五步验证...0x000480100000000f 这里我直接打印NSObject内存,发现第一段是0x00000001074b11d8,它是NSObjectisa指针指向,也就是根元

70010

iOS开发之 Method Swizzling 深入浅出

该方法第一个参数指向调用方法自身(即内存中实例对象,若是调用方法,该指针则是指向元对象(metaclass)。第二个参数是这个方法名字selector,该方法真正参数紧随其后。...如果多次调用了[super load],可能会出现“Swizzle无效”假象,原理见下图: [dos2ufzkl1.png] Swift 自定义中使用 Method Swizzling 要在 Swift...自定义中使用 Method Swizzling 有两个必要条件: 包含 Swizzle 方法需要继承自 NSObject 需要 Swizzle 方法必须有动态属性(dynamic attribute...当然也要继承自 NSObject。...再注:下面这个例子使用了 Objective-C 动态派发,对于 NSObject 子类(UIViewController)是可以直接使用,并不是 Swift 中自定义,因此没有加 dynamic

2.4K70

使用 Swift 提高代码质量

class不需要额外堆内存分配/释放和更少内存消耗 方法静态派发 - 方法调用支持静态调用相比原有ObjC消息转发调用性能更好 编译器优化 - Swift静态性可以使编译器做更多优化。...例如Tree Shaking相关优化移除使用类型/方法等减少二进制文件大小。...在代码设计时可以优先考虑使用protocol来避免臃肿父类同时更多使用值类型。 提示:一些无法用protocol替代继承场景:1.需要继承NSObject子类。2.需要调用super方法。...例如通过推断final/函数内联/泛型特化更多使用静态派发,并且可以移除部分使用代码。...包大小 - 相比class,值类型不需要创建ObjC对应ro_data_t数据结构。 提示:class即使没有继承NSObject也会生成ro_data_t,里面包含了ivars属性信息。

4.7K30

NSObject头文件解析 消息机制 Runtime解读 (一)

: 在实现文件中重写doesNotRecognizeSelector方法, 增加打印一行字, 注意自定义内容要写在调用方法前面, 否则调用方法就直接crash了, 不会继续执行后面的内容....html 讲解得很透彻 super class: 指向该类,如果该类已经是最顶层(如NSObject或NSProxy),则super_class为NULL 当我们调用superClass...时返回就是这个Class名, 调用[super method];时就是子类去调用这个方法(注意是子类调用, 而不是父, 只是从父中取得方法地址而已) 这部分可能有些人会有一点疑惑, 我们讲下...3.如果上面两个都过了,那就开始查找这个 IMP,先从 cache 里面找,完了 找得到就跳到对应函数去执行。 4.如果 cache 找不到就找一下方法表。...5.如果方法表找不到就到超/父方法表去找,一直找,直到找到NSObject为止。

1.2K31

Swift 4.0 新特性

去掉了 characters Swift 3 中 String 需要通过 characters 去调用属性方法,在 Swift 4 中可以通过 String 对象本身直接调用,例如: let values...,然后把 Swift调用 Objective-C 头文件都写在里面,编译器会读取 Bridging Headers 中头文件,然后生成一个庞大 Swift 文件,文件内容是这些头文件内...移除调用协议实现 struct Date { private let secondsSinceReferenceDate: Double } extension Date: Equatable...在 Swift 3 中,编译器会在很多地方为我们隐式加上 @objc,例如当一个继承于 NSObject,那么这个所有方法都会被隐式加上 @objc。...} 在 Swift 4 中,隐式 @objc 自动推断只会发生在很少的当必须要使用 @objc 情况,比如: 复写父 Objective-C 方法 符合一个 Objective-C 协议 其它大多数地方必须手工显示加上

1.8K90

module & Swift

在静态链接时候,也就是静态库链接到主项目或者动态库,最终生成可执行文件或者动态库时,静态链接器可以把多个module链接优化成一个,来减少本来多个module直接调用问题 module原理 开启...} } 在LGSwiftTeacher.swift文件中,调用了OC代码。在日常项目中,使用桥接文件即可。...静态库 在Xcode 9之后,Swift开始⽀持静态库 Swift没有头⽂件概念,外界如何使⽤Swift中public修饰和函数?...静态库中LGSwiftTeacher,可以在OC下正常使用 但此时还有另一个问题: 在LGSwiftTest.swift中,使用import导入LGSwiftA,还是编译报错 在Swift中,...() t.speek() } } 编译成功,Swift静态库中LGSwiftTeacher,可以在Swift下正常使用 在LGSwiftA.framework和LGSwiftB.framework

2K45

面试驱动技术之 - isa && 元 && 函数调用

image 原理解释: image 之前 NSObject 创建一个对象,确实是分配了 16 个字节空间 但是,他还有使用空间8个字节,还是可以存储 这里age && no 存进去,正好...实现,调用它,整个流程结束 image [MNSubclass superClassMethod]; 问: 子类调用方法,执行流程是如何?...,class 存储是 对象方法 从面向对象角度来讲,一个调用一个方法,不应该最后调用到 对象方法 这里Root class 就是 NSObject, 要给 NSObject 添加方法就要用到...分类 验证 NSObject 对象方法是否会被调用 //"NSObject+MNTest"声明 && 实现 @interface NSObject (MNTest) + (void)checkSuperclass...沿着 superclass 指针找到他 - NSObject 最终在 NSObject 中找到 class 实现 而调用方都是都是当前对象,所以最后输出都是 - MNSubclass 验证:

91920

探寻iOS之协议(protocol)

任何其他都能够选择遵守这个协议并实现其中一个或多个方法,从而利用这个行为。如果协议遵守者实现了协议中方法,那么声明协议就能够通过遵守者调用协议中方法。...因为这个协议中定义了一些基本方法,由于我们使用所有都继承NSObject这个基,而这个基遵守了这个协议,那么也就实现了其中那些方法,这些方法当然可以由NSObject及其子类对象调用...本段一开始便说道:中方法在NSObject中实现了,那么无需再关心实现了,直接调用方法吧。...当我们实现了NSCopying协议,通过对象调用copy方法时,copy方法就会去调用我们实现- (id)copyWithZone:(NSZone *)zone方法,实现拷贝功能。...因为指针可能实际指向是PersonModel子类。这种情况下,通过调用[self class],就可以返回正确类型对象。

1.6K20

iOS - Swift 面向协议编程(一)

OC无法做到面向协议开发,而Swift可以,因为Swift可以做到协议方法具体实现,而OC不行 面向对象开发 传统面向对象开发思维方式是将中实现相似方法抽取出来,接着放入一个Base,然后继承于...Base后各个即可找拥有相同方法,不用再一个个手动实现。...eat() } 我们Person遵守协议LXFProtocol,需要我们实现协议中方法,如: class Person: NSObject, LXFProtocol { func eat(...) { // } } 那我们每个都这样做的话跟直接复制粘贴代码并没什么不同~~ 而开头已经提到一点: Swift可以做到协议方法具体实现 �那么现在,我们新建一个Swift...协议方法具体实现需要在extension中来实现 使Dog遵守Eatable class Dog: NSObject, Eatable { } 这样我们就可以在其它地方轻松调用dogeat方法

66750

iOS_ __attribute__

,帮助编译器估计哪些指针可能指向同一个对象 warn_unused_result:声明返回值很重要,当调用使用返回值时编译器发出警告⚠️ nothrow:不抛出C++ 异常 3.变量属性(Variable...// 如果设置少于4,编译器会自动优化成4 // 最大也只能是8 struct student { char sex; int length; char name[2];...); } visibility visibility 类型有 4 种: default:默认可见性对象与函数可以直接在其他模块中引用,包括在动态链接库中 ,它属于一个正常,完整外部连接。...objc_requires_spuer 在父中某个方法上添加这个,编译器会提醒子类重写方法中调用 [super] __attribute__((objc_requires_spuer)) objc_runtime_name...比如某个在构造时候不想直接通过init来初始化,只能通过特定初始化方法()比如单例,就可以将init方法标记为unavailable。

23430
领券