将实现协议的 Swift 类导入到 Objective-C 类中
Posted
技术标签:
【中文标题】将实现协议的 Swift 类导入到 Objective-C 类中【英文标题】:Importing a Swift class that implements a protocol into Objective-C class 【发布时间】:2017-11-07 23:36:21 【问题描述】:我在 Swift 中有一个实现协议的类:
class SwiftClass: SwiftProtocol
func test()
NSLog("Test");
这是简单的协议
@objc protocol SwiftProtocol
func test()
当我将它导入并使用一个 Objective-C 类时,它给出了这个错误
使用未声明的标识符“SwiftClass”
-
当我让 SwiftClass 扩展 NSObject 时,它工作正常。
在协议中添加和删除 @objc 会产生相同的错误。
2 个文件的 Target Membership 指向正确的项目。
有没有办法导入我的实现协议的类?我做错了什么?
【问题讨论】:
使用@objc class SwiftClass ...
有什么不同吗?
SwiftClass
必须继承 NSObject
才能从 Objective-C 中使用它。当然,Objective-C 源代码必须 #import
Swift 标头(例如,MyApp-Swift.h
或其他)。
【参考方案1】:
来自https://developer.apple.com/library/content/documentation/Swift/Conceptual/BuildingCocoaApps/InteractingWithObjective-CAPIs.html#//apple_ref/doc/uid/TP40014216-CH4-ID35,Swift 类型兼容性部分:
当你创建一个继承自 Objective-C 类的 Swift 类时, 类及其成员——属性、方法、下标和 初始化器——与 Objective-C 兼容的会自动 可从 Objective-C 获得。
这与您观察到的一致:如果SwiftClass
扩展NSObject
,它工作正常。这样解决问题有什么问题吗?
【讨论】:
谢谢!由于没有扩展 NSObject 的类在 Swift 中工作,我很困惑为什么它不能与 Obj-C 一起工作,但你为我完美地清除了它。非常感谢!!!以上是关于将实现协议的 Swift 类导入到 Objective-C 类中的主要内容,如果未能解决你的问题,请参考以下文章
将 Swift 导入 Objective-C - “使用未声明的标识符”