问题标签 [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.
ios - 协议不响应选择器
我对 Objective-C 协议有疑问。
我已经定义了协议:
在这个类实现中,我调用委托:
在视图控制器中,我添加PlayerProfileSectionProReviewDelegate
并覆盖了didReceivedPlayerProfileSectionProReviewData
方法:
和
为什么我的协议不响应选择器?
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。(关联)
objective-c - 需要澄清协议中声明的属性规则
我对协议中声明的属性有一些疑问。
返回类型差异
好的,所以我用协议/类组合尝试了这个,令我懊恼的是,它编译了。
这是如何运作的?这在技术上不符合接口吗?
属性声明修饰符
我的 Mac 现在正在重新启动,所以我无法尝试,但我认为这没关系,因为协议声明没有任何支持。调用者不会对所有修饰符感兴趣,只会对实现协议的类感兴趣。
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 数据是由另一个应用程序写入的)。但是,可能有更好的解决方法。
objective-c - 有没有办法强制 XCode 在实现文件中不包含的头文件中提供导入和/或类的自动完成功能?
我注意到,在编辑头文件时,XCode 不会自动建议要导入的头文件或导入文件中的类,除非您正在编辑的文件本身是由目标中包含的某个文件导入的。
我有点明白其中的原因,但它是超级蹩脚的。我很高兴在编译时权衡失望(哎呀!那不是我可以导入的类),以便在编写标头时节省大量时间。
顺便说一句,我知道我可以使用前向类和协议声明,但这无济于事,因为我经常需要使用一些我没有记住的名字。一旦我知道要向前申报的事情,我就会!
有没有办法让 XCode 对此更加自由?
编辑:有图片
这是我在输入字母“#i”时添加到目标的实现文件包含的头文件中看到的内容:
现在我注释掉我正在编辑的标题的包含
现在这就是我得到的 - 但自动完成仍然有效
当我创建一个新协议时,当然它不是由某个实现文件导入的(因为它是新的并且它不是一个类,所以没有创建相关的实现文件)。
所以导入(和类)的自动完成不起作用......直到我从实现中导入它
现在自动完成工作
objective-c - 类型“SwiftClass”不能符合协议“ObjcProtocol”,因为它有无法满足的要求
我有一个我正在尝试在 Swift 类中实现的 Objective-C 协议。例如:
当我尝试在这样的 Swift 类中遵守它时:
我收到以下可怕的编译器错误:
类型“SwiftClass”不能符合协议“ObjcProtocol”,因为它有无法满足的要求。
我该如何解决这个问题?
cocoa - 如果所有方法都是可选的,那么协议的目的是什么?
我了解协议的用途(使类型符合一组方法或/和属性的列表),但我不了解具有所有可选方法的协议的目的是什么。一个例子是UITextFieldDelegate
。
如果协议中的所有方法都是可选的,为什么要遵守协议而不是在类中从头开始编写方法?在这种情况下,我看不出遵守协议的好处或目的是什么。
那里的可选方法是否只是可以实现的功能建议?
objective-c - 通过函数参数获取对象的协议
假设我们有以下 C++ 代码:
它非常简单,远非完美,但它描绘了一幅图画:通过函数的参数获取指向对象接口的指针。
我们如何在 Objective C 协议中得到相同的结果?
提前致谢。
ios - 如果我的课程符合两个具有相同属性的协议,会发生什么?
假设我有两个协议
另一个作为
并且有一个符合这些协议的类
.h 文件
.m 文件
它将引用哪个 trackCount 属性?我可以使用 trackCount 两次吗?
它肯定不会给出任何编译时错误。