首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >调用Objective C委托方法

调用Objective C委托方法
EN

Stack Overflow用户
提问于 2016-03-04 03:40:31
回答 2查看 1K关注 0票数 1

我在目标C协议中声明了一种方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@protocol QMChatConnectionDelegate <NSObject>
@optional
- (void)chatServiceChatDidConnect:(QMChatService *)chatService;

我想在我的.swift文件中使用这个方法作为回调。我的问题是,在类主体中直接使用chatServiceChatDidConnect方法与将它作为扩展的一部分添加有什么区别:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Chat: NSObject, QMChatConnectionDelegate
{
...
  func chatServiceChatDidConnect(chatService: QMChatService!) {
    print("connected")
  }
}

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Chat: NSObject, QMChatConnectionDelegate
{
...
}

extension Chat: QMChatConnectionDelegate {
    func chatServiceChatDidConnect(chatService: QMChatService!) {
        print("connected")
    }
}

我需要把它声明为extension Chat : QMChatConnectionDelegate {}还是extension Chat {}

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-04 05:43:05

这里有两个问题,因此我将尽可能直接地解决这两个问题。

在类体中直接使用chatServiceChatDidConnect方法或将其作为扩展的一部分添加有什么区别?

根据你所说的“差异”的意思,答案要么是“没有”,要么是“很少”。

一旦您的项目被编译,就没有什么不同了。在编译过程中,可能需要稍长的时间,但我怀疑这种差异是否足以引起人们的注意。在开发过程中,差异主要是组织性的,但可能部分是架构性的。

如果不将扩展名移动到单独的文件中,则区别将是纯组织性的。如果您的类符合多个协议或特别大的协议,那么将协议一致性组织到扩展中对于类的人工解析可能是有益的。

如果确实将扩展名移到单独的文件中,那么当我们考虑private访问修饰符在Swift中如何工作时(或者当我们认为扩展名可能不仅仅是不同的文件,而是不同的模块,但为了简单起见,让我们关注private)时,您也可以获得一些架构上的差异。

考虑遵从UITableViewDataSource协议。可以想象,在从tableView(_:cellForRowAtIndexPath:)返回一个单元时,我们可能需要一些助手方法,如果是这样的话,tableView(_:cellForRowAtIndexPath:)可能是真正需要调用这些方法的唯一方法。如果是这样的话,我们可以在一个单独文件中的扩展名中创建协议一致性,并将所有的辅助方法标记为private。现在,我们已经将这些助手方法的范围缩小到了这个扩展(扩展应该是唯一需要它的地方)。

我需要声明为extension Chat: QMChatConnectionDelegate {}还是extension Chat {}

答案是看情况而定。

当然,您不需要在多个地方将您的类标记为符合协议。只要一个就行了。虽然扩展可以具有与它们扩展的类不同的访问级别(例如,一个private类的internal扩展),但是它们的访问级别不能比它们扩展的类更宽(例如,不允许internal类的public扩展)。

对我来说,最有意义的不是将类标记为符合协议,而是将扩展标记为符合协议:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Chat: NSObject {}
extension Chat: QMChatConnectionDelegate {}

重要的是,当我们创建这样的类和扩展时,它使我们的代码保持相当模块化。我们班不应该依赖扩展中的任何东西。它应该完全不使用它,并且删除扩展允许我们的类仍然正常工作(只是不适合使用QMChatConnection)。

票数 2
EN

Stack Overflow用户

发布于 2016-03-04 05:10:31

首先,扩展名声明仅对文件作用域有效,因此第二个示例应该如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Chat: NSObject
{
...
}

extension Chat : QMChatConnectionDelegate {
  func chatServiceChatDidConnect(chatService: QMChatService!) {
    print("connected")
}

其次,您不应该在类声明和扩展中重新声明协议一致性。

您应该或多或少地将Swift扩展处理为目标-C中的类别。

在回答您的问题时,如果您在类范围或扩展中直接声明符合协议的方法,则没有太大的区别。在扩展中添加协议一致性可能有以下几个好处:

  1. 可以在单独的文件中添加实现某些协议的方法。
  2. 您可以在现有类中添加协议一致性,而无需修改它们的主体。因此,最终您可以将协议一致性添加到第三方类中。
  3. 它允许您的源代码有一个良好的逻辑组织。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35795138

复制
相关文章
使用CSV模块和Pandas在Python中读取和写入CSV文件
CSV文件是一种纯文本文件,其使用特定的结构来排列表格数据。CSV是一种紧凑,简单且通用的数据交换通用格式。许多在线服务允许其用户将网站中的表格数据导出到CSV文件中。CSV文件将在Excel中打开,几乎所有数据库都具有允许从CSV文件导入的工具。标准格式由行和列数据定义。此外,每行以换行符终止,以开始下一行。同样在行内,每列用逗号分隔。
用户7466307
2020/06/16
20.1K0
JAVA读取csv文件_java读取csv文件某一列
当读取的是一个简单的csv文件,即文件的列字段中不包含分隔符时,可以使用BufferedReader或者Scanner类去读取
全栈程序员站长
2022/11/16
3.8K0
java读取写入CSV文件
[1]使用Split函数分成一个String[]: https://blog.csdn.net/u013555719/article/details/106029538
演化计算与人工智能
2020/08/14
4.1K0
java读取写入CSV文件
python中的可变数据类型和不可变数据类型
不允许变量的值发生变化,如果变量的值变化了,那么就是新建了一个对象;对于相同值的对象,在内存中只有一个对象。
西西嘛呦
2020/08/26
6350
python中如何打开csv文件_python如何读取csv文件
python如何读取csv文件,我们这里需要用到python自带的csv模块,有了这个模块读取数据就变得非常容易了。
全栈程序员站长
2022/09/16
7.9K0
python中如何打开csv文件_python如何读取csv文件
可变、不可变数据类型
可变数据类型:在id不变的情况下,value可改变(列表和字典是可变类型,但是字典中的key值必须是不可变类型)
py3study
2020/01/20
7670
csv写入与读取
import csv #若存在文件,则打开csv文件,若不存在,则新建文件 #若不设置newline=””,则每行数据会隔一行空包行 csvfile = open(“csv_test.csv”,”w”,newline = “”) #w是覆盖形写入,a是追加写入 #将文件加载到csv对象中 writer = csv.writer(csvfile) #写入一行数据 writer.writerow([‘姓名’,’年龄’,’电话’]) #多行数据写入 data = [ (‘张三’,’18’,’0291321332′), (‘李四’,’21’,’2932131934′) ] writer.writerows(data) #关闭csv对象 csvfile.close()
kirin
2021/03/11
1.1K0
Java工具集-Csv文件读取工具类
添加依赖 <!--开源的opencsv--> <dependency> <groupId>com.opencsv</groupId> <artifactId>opencsv</artifactId> <version>4.6</version> </dependency> 代码示例 import java.io.FileInputStream; import java.io.FileNot
cwl_java
2020/05/01
2K0
在python中使用csv读写CSV 原
1.一般读写方式 # 读取csv文件 import csv with open('some.csv', 'rb') as f: # 采用b的方式处理可以省去很多问题 reader = csv.reader(f) for row in reader: # do something with row, such as row[0],row[1] import csv with open('some.csv', 'wb') as f: # 采用b的方式
晓歌
2018/08/15
1.1K0
[译] 为什么String在Java中是不可变的
String 在 Java 中是不可变的。 不可变类只是一个无法修改其实例的类。 创建实例时,将初始化实例中的所有信息,并且无法修改信息。 不可变类有许多优点。 本文总结了为什么 String 设计为不可变的。 这篇文章从内存,同步和数据结构的角度说明了不变性概念。
haifeiWu
2020/02/10
1.3K0
jmeter读取csv文件
操作步骤: 1.读取csv文件 2.编辑httpSampler
互联网金融打杂
2018/08/02
1.5K0
jmeter读取csv文件
Tensorflow | 读取csv文件
结果好长,给出关键的部分: INFO:tensorflow:Saving evaluation summary for step 12001: accuracy = 0.966667, loss = 0.461221 Accuracy: 0.966667
努力在北京混出人样
2019/02/18
1.8K0
在python中读取和写入CSV文件(你真的会吗?)「建议收藏」
注意,打开文件时应指定格式为w, 文本写入. 打开文件时,指定不自动添加新行newline=‘’,否则每写入一行就或多一个空行。
全栈程序员站长
2022/09/16
5.2K0
在python中读取和写入CSV文件(你真的会吗?)「建议收藏」
可变与不可变数据类型
根据可变数据类型与不可变数据类型的概念,只需要在改变value值的同时,使用id()函数查看变量id值是否变化就可以知道这种数据类型是可变的还是不可变的了
全栈程序员站长
2022/07/21
4800
Java读取csv文件的三种方式
最近需要进行对数据库的数据进行导入导出,之前使用的方式是,同时接到两台数据库上,进行读写操作;
JQ实验室
2022/09/29
9K0
Java读取pkl文件_theano csv到pkl文件
my_data = genfromtxt(csvFile, delimiter=’,’, skip_header=1)
全栈程序员站长
2022/09/30
1.3K0
Java Varargs 可变参数使用
"Varargs"是 “variable number of arguments”的意思。有时候也被简单的称为 “variable arguments”。
HoneyMoose
2020/02/14
1.2K0
go语言读取CSV文件
package main import ( "encoding/csv" "fmt" "io/ioutil" "strings" ) // 游戏读取数据,读取游戏配置数据 func ReadCsv_ConfigFile_Fun(fileName string) bool { // 获取数据,按照文件 fileName = "./csv/" + fileName cntb, err := iouti
李海彬
2018/03/22
6.5K0
Python读取CSV和Excel
逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列.
Minerva
2020/05/21
3.4K0
Python学习:读取csv文件
CSV是Conma Sepatrate Values(逗号分隔值)的缩写,文档的内容是由‘,’分隔的一列列数据构成的。CSV格式是电子表格和数据库最常用的导入和导出格式。 CSV模块实现了以CSV格式读取和写入表格数据,它允许程序员以Excel首选格式写入数据,或者从Excel生成的文件中读取数据。
烤粽子
2021/07/07
2.7K0
Python学习:读取csv文件

相似问题

在Java中读取csv

20

在python中读取可变列多头csv文件

21

在Java中读取CSV文件

21

在Java / Jython中读取CSV

23

在java中读取大型CSV

33
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文