【问题标题】:SWIFT: try to use delegate method of objective c classSWIFT:尝试使用目标 c 类的委托方法
【发布时间】:2015-02-26 22:55:39
【问题描述】:

我有一个现有的Objective-C SDK (AugmentedKit SDK)。我正在尝试将它与Swift 一起使用。 AugmentedKit SDK 有一个名为“AKSurfaceView”的类,它实现了对“AKViewDataSource”协议的委托。

@class AKSurfaceView;
@protocol AKViewDataSource;

@protocol AKViewDelegate<AKViewDataSource>

AKViewDataSource 如下所示:

@protocol AKViewDataSource<NSObject>
@required
-(AKMarkerTemplate*) viewforMarker:(AKMarker*) marker; 

我创建了一个 briging 文件,实现了 AKSurfaceView 的其他方法等 - 一切正常,但是当我尝试将 AKViewDelegate 的引用添加到我的 UIViewControllerClass 时,它以编译错误结束:

“类型POIViewController不符合协议'AKViewDataSource'”

我的实现如下所示:

class POIViewController: UIViewController, AKViewDelegate {

我在 SWIFT 中的“viewforMarker”实现如下所示:

func viewforMarker(marker:AKMarker) -> AKMarkerTemplate{
    var markerView:SimpleMarker = SimpleMarker(frame: CGRectMake(0, 0, 230, 80))
    markerView.title.text = marker.markerName
    return markerView
}

请任何人帮助我弄清楚我必须如何实现“viewforMarker”以便代表识别它?

【问题讨论】:

  • SimpleMarker 是 AKMarkerTemplate 吗?
  • 是的,SimpleMarker 是一个 AKMarkerTemplate
  • 我试过你的代码,它编译得很好(考虑到所有必须考虑的东西)。
  • 我建议你做的就是我所做的——制作一个由只是这些声明组成的简单项目。你会看到它编译得很好。现在您可以找出实际项目中的问题所在。
  • 通常您需要将返回的对象质量作为可选项,因为现在对于 ObjC 例程返回 nil 是完全合法的。例如: func viewforMarker(marker:AKMarker!) -> AKMarkerTemplate! (注意 '!'s)

标签: ios objective-c swift delegates augmented-reality


【解决方案1】:

确保您已在 Bridging-Header.h 中导入 Obective-C 类,并在您的 swift 类中添加以下内容:

markerView.delegate = self

【讨论】:

    【解决方案2】:

    看起来您的AKViewDelegateAKViewDataSource 的子类,在这种情况下,您必须符合AKViewDelegateAKViewDataSource,这意味着您必须实现这两个协议所需的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-10
      相关资源
      最近更新 更多