【发布时间】:2016-09-16 03:00:56
【问题描述】:
我正在使用 Fusuma cocoal pod 框架。然而,我发现他们有一个 Objective-C 协议,即使整个项目都是用 Swift 编写的。
@objc public protocol FusumaDelegate: class {
func fusumaImageSelected(image: UIImage)
optional func fusumaDismissedWithImage(image: UIImage)
func fusumaVideoCompleted(withFileURL fileURL: NSURL)
func fusumaCameraRollUnauthorized()
optional func fusumaClosed()
}
我想在协议中添加另一个功能。但是,我收到此警告
方法不能是@objc协议的成员,因为参数的类型不能在objective-C中表示
我正在考虑删除协议前面的@objc,但它说我必须删除可选的 func。我不介意将它们更改为普通功能,但是,我想知道如果我删除 @objc 应该注意什么
我要添加的函数是前一个 VC 的另一个委托函数。在这种情况下,我有 3 个 VC。第二个是这个,它在被解雇后从第三个 VC 中获取数据。然后我想添加下面的委托函数让VC1开始上传数据
extension FusumaViewController: VC3Delegate {
func readyToUploadPost(postUpload: PostUpload) {
delegate_?.readyToUploadPost_Fusuma(postUpload)
}
【问题讨论】:
-
他们可能需要 Objective-C 的动态功能。你不能在 Swift 中做到这一点。
-
您尝试添加的功能是什么样的?
-
@MikeTaverne,请查看解决您问题的更新问题。我试图删除可选的 func 并删除 objC,但它给了我一个错误,说 Method cannot be declaredpublic 因为它的参数使用内部类型。所以我最终只是创建了一个完全独立的协议来处理它。不确定这是否是正确的方法。看起来像一个黑客
-
似乎在抱怨 PostUpload 在 Objective-C 中不可表示。 PostUpload 是否继承自 NSObject?
-
@AminNegem-Awad 这与 Objective-C 的动态行为无关,但与 Swift 中没有可选的协议要求有关。
标签: ios objective-c swift cocoapods bridging-header