如何在Swift中使用包含前向声明Swift类的ObjC类的方法?

时间:2015-11-18 09:16:40

标签: objective-c swift forward-declaration

//CoolSwiftClass.swift
@objc(MyCoolSwiftClass)
class CoolSwiftClass: NSObject {}

//MyObjCViewController.h
@class MyCoolSwiftClass;
@interface MyObjCViewController : UIViewController
- (instancetype)initWithMyCoolSwiftClass:(MyCoolSwiftClass *)myCoolSwiftClassInstance;
@end

//SadSwiftClass.swift
class SadSwiftClass: UIViewController {
  override func loadView() {
    super.loadView()
    //This won't work
    let myObjCViewController = MyObjCViewController(coolSwiftClass: coolSwiftClassInstance)
  }
}

似乎Swift可以找到前向声明MyCoolSwiftClass,但它无法发现它实际上是CoolSwiftClass

screenshot

我在Swift and Objective-C in the Same Project找不到任何可以帮助我的东西。

更新于2015-11-19 13:34 CST

只需将回购上传到GitHub:SO33775908

更新于2015-11-19 13:47 CST

找出解决方法:

没有特殊的ObjC名称。结帐分支No special ObjC name

更新于2015-11-19 14:47 CST

产生警告的另一种解决方法:

@compatibility_alias with several warnings

1 个答案:

答案 0 :(得分:0)

我找到的最佳方法是解决方法1:

没有特殊的ObjC名称

如果您暂时使用了特殊的ObjC名称,可以使用以下内容:

//ClassName_Alias.h
#define MyCoolSwiftClass CoolSwiftClass

//CoolSwiftClass.swift
@objc
class CoolSwiftClass: NSObject {}

请查看样本仓库的问题更新1。