问题标签 [objective-c-protocol]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
413 浏览

ios - 协议不响应选择器

我对 Objective-C 协议有疑问。

我已经定义了协议:

在这个类实现中,我调用委托:

在视图控制器中,我添加PlayerProfileSectionProReviewDelegate并覆盖了didReceivedPlayerProfileSectionProReviewData方法:

为什么我的协议不响应选择器?

0 投票
1 回答
3223 浏览

objective-c - 如何创建符合 Swift 和 Objective-C 之间共享协议的类方法?

我最近一直在学习 Swift。

我决定编写一个混合 Swift/Objective-C 应用程序,它使用两种语言实现的相同算法来执行计算密集型任务。

该程序计算大量素数。

我定义了一个计算对象的 Swift 和 Objective-C 版本都应该遵守的协议。

这些对象都是单例的,所以我在 Objective-C 中创建了一个典型的单例访问方法:

整个协议如下所示:

该类的 Objective-C 版本完全按照上面定义的方法实现方法,不用担心。

swift版本有一个方法:

但是,如果我将该方法设为协议的必需方法,则会收到编译器错误“类型”CalcPrimesSwift 不符合协议“CalcPrimesProtocol”。

但是,如果我在协议中将单例类方法 sharedInstance 标记为可选,它就可以工作,并且我可以在我的 Swift 类或我的 Objective-C 类上调用该方法。

我是否错过了 Swift 类方法定义中的一些微妙之处?这似乎不太可能,因为我能够在我的 Swift 类或我的 Objective-C 类上调用 sharedInstance() 类方法。

您可以从 Github 下载该项目,如果您愿意,可以查看它。它被称为SwiftPerformanceBenchmark。(关联)

0 投票
1 回答
176 浏览

objective-c - 需要澄清协议中声明的属性规则

我对协议中声明的属性有一些疑问。

返回类型差异

好的,所以我用协议/类组合尝试了这个,令我懊恼的是,它编译了。

这是如何运作的?这在技术上不符合接口吗?

属性声明修饰符

我的 Mac 现在正在重新启动,所以我无法尝试,但我认为这没关系,因为协议声明没有任何支持。调用者不会对所有修饰符感兴趣,只会对实现协议的类感兴趣。

0 投票
0 回答
592 浏览

macos - 将objective-C类的可选方法添加到swift扩展

对于一个已经很广泛的 Objective-C 应用程序,我想添加 Core Data 功能。最近在 Swift 中添加了新功能,到目前为止效果很好。

因为我的 Objective-CAppDelegate已经包含了很多东西,所以我决定写一个 Swift 扩展来AppDelegate. 我发现 Objective-C 和 Swift 部分都可以非常愉快地一起生活,除了以下几点。

我从一个空的 Swift Core Data 项目的 Swift 模板中复制的核心数据内容。

问题在于一个可选方法applicationShouldTerminate:(来自NSApplicationDelegate协议),我没有在类的遗留 Objective-C 部分中定义它。但是 Swift 扩展中的定义不会编译,因为该方法似乎是双重定义的。显然,没有提及 Obj-C 源代码中的可选方法会导致包含默认版本。

我试图applicationShouldTerminate:在 Obj-C 中实现一个在 Swift 中调用的虚拟对象applicationShouldterminate2(sender),但是 Obj-C 没有看到扩展中的方法。有没有办法@objc让我可以使符号可见?

关于我应该如何进行的任何提示?

重要的是要知道,我的带有 Core Data 内容的 Swift 扩展最初编译得很好。当我升级到 XCode 6.3b2(我认为)时,符号冲突首先发生。在没有冲突之前。我现在在 XCode 7b1,但仍然没有雪茄。

编辑:添加源代码
文件“AppDelegate.h”:

文件“AppDelegate.m”

AppDelegate+CD.Swift

NSApplicationDelegate 协议有如下定义

错误信息:

我认为,自从 XCode6.3b2 以来,编译器生成了一个默认的“ applicationShouldTerminate:”定义,而之前没有。
我目前的解决方法是完全注释掉func applictionShouldTerminate {...}(我预计不会有什么危害,因为我以只读方式访问 CD 数据——CD 数据是由另一个应用程序写入的)。但是,可能有更好的解决方法。

0 投票
0 回答
334 浏览

objective-c - 有没有办法强制 XCode 在实现文件中不包含的头文件中提供导入和/或类的自动完成功能?

我注意到,在编辑头文件时,XCode 不会自动建议要导入的头文件或导入文件中的类,除非您正在编辑的文件本身是由目标中包含的某个文件导入的。

我有点明白其中的原因,但它是超级蹩脚的。我很高兴在编译时权衡失望(哎呀!那不是我可以导入的类),以便在编写标头时节省大量时间。

顺便说一句,我知道我可以使用前向类和协议声明,但这无济于事,因为我经常需要使用一些我没有记住的名字。一旦我知道要向前申报的事情,我就会!

有没有办法让 XCode 对此更加自由?

编辑:有图片

这是我在输入字母“#i”时添加到目标的实现文件包含的头文件中看到的内容:

前

现在我注释掉我正在编辑的标题的包含

评论

现在这就是我得到的 - 但自动完成仍然有效

后

当我创建一个新协议时,当然它不是由某个实现文件导入的(因为它是新的并且它不是一个类,所以没有创建相关的实现文件)。

新协议

所以导入(和类)的自动完成不起作用......直到我从实现中导入它

进口协议

现在自动完成工作

耶

0 投票
1 回答
5663 浏览

objective-c - 类型“SwiftClass”不能符合协议“ObjcProtocol”,因为它有无法满足的要求

我有一个我正在尝试在 Swift 类中实现的 Objective-C 协议。例如:

当我尝试在这样的 Swift 类中遵守它时:

我收到以下可怕的编译器错误:

类型“SwiftClass”不能符合协议“ObjcProtocol”,因为它有无法满足的要求。

我该如何解决这个问题?

0 投票
4 回答
8034 浏览

objective-c - Objective c 协议泛型

Objective-C 协议可以是通用的吗?

按照本教程,我基本上是在寻找类似的东西:

对于某些ObjectType“实现”(“继承”)另一个协议的人来说,这是一个通用协议NSObject

0 投票
3 回答
142 浏览

cocoa - 如果所有方法都是可选的,那么协议的目的是什么?

我了解协议的用途(使类型符合一组方法或/和属性的列表),但我不了解具有所有可选方法的协议的目的是什么。一个例子是UITextFieldDelegate

如果协议中的所有方法都是可选的,为什么要遵守协议而不是在类中从头开始编写方法?在这种情况下,我看不出遵守协议的好处或目的是什么。

那里的可选方法是否只是可以实现的功能建议?

0 投票
2 回答
37 浏览

objective-c - 通过函数参数获取对象的协议

假设我们有以下 C++ 代码:

它非常简单,远非完美,但它描绘了一幅图画:通过函数的参数获取指向对象接口的指针。

我们如何在 Objective C 协议中得到相同的结果?

提前致谢。

0 投票
1 回答
153 浏览

ios - 如果我的课程符合两个具有相同属性的协议,会发生什么?

假设我有两个协议

另一个作为

并且有一个符合这些协议的类

.h 文件

.m 文件

它将引用哪个 trackCount 属性?我可以使用 trackCount 两次吗?

它肯定不会给出任何编译时错误。