【问题标题】:How to adopt an Obj-C protocol with one property in Swift?如何在 Swift 中采用具有一个属性的 Obj-C 协议?
【发布时间】:2015-12-16 22:50:05
【问题描述】:

我有这个 Obj-C 协议

@protocol MSOutlineViewControllerModelInterface
@property   (weak)  MSOutlineViewController *fatherController ;
@end

我有这个速成课

class ModelFileTree : NSObject, MSOutlineViewControllerModelInterface
{
    @objc   weak var fatherController   : MSOutlineViewController?
}

编译器一直告诉我“ModelFileTree 类型不符合协议'MSOutlineViewControllerModelInterface'...我想不出任何办法...

【问题讨论】:

  • 这对我来说编译得很好。错误消息中是否有更多详细信息?
  • 好吧,如果我详细了解错误,我有 2 句话: 1 - 协议需要属性 'fatherController' 类型为 'MSOutlineViewController?' (aka 'Optional') 2 - 候选人有不匹配的类型'MSOutlineViewController?' (又名'Optional')对我来说,这看起来和我所做的一模一样......
  • 仍然不明白,但提示:如果我用任何其他类替换 MSOutlineViewController(好吧,我尝试了其他 3 个类),它编译... MSOutlineViewController 定义为:@interface MSOutlineViewController:NSViewController
  • 再次检查您的 Obj-C 桥接头以确保正确导入 MSOutlineViewController
  • 我做到了,但它是......我真的没有想法了

标签: objective-c swift protocols


【解决方案1】:

编译器在抱怨,因为它将MSOutlineViewController 与MSOutlineViewController? 进行比较,这在Swift 中是不同的。

试试这个:

@protocol MSOutlineViewControllerModelInterface
    @property   (weak)  MSOutlineViewController * _Nullable fatherController ;
@end

【讨论】:

  • 很好的尝试,但这并不能解决问题...症状还是一样
猜你喜欢
  • 1970-01-01
  • 2015-06-18
  • 2016-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多