具有相同名称的Swift和Objective-C类

时间:2016-01-02 19:00:41

标签: objective-c swift

我还在学习如何将Swift代码集成到用Objective C编写的代码中。如果我将Swift文件和类命名为任何Objective-C类已经采用的名称,那就说了。例如,

我会创建:" ViewController.swift",并具有以下内容:

import Foundation
import UIKit

@objc class ViewController:UIViewController {
    func swiftMethod() {
        print("It works.")
    }
}

已经有#34; ViewController.h"和" ViewController.m"。后来我会尝试在Objective-C中调用Swift类:

#import <myproject-Swift.h>
...
ViewController *vc = [ViewController new];
[vc swiftMethod];
...

编译器如何知道我启动了哪个类:来自Swift的类还是来自Objective-C的类?

1 个答案:

答案 0 :(得分:6)

在Obj-C运行时,这两个类实际上有不同的名称。 Swift类名为YourProject.ViewController,而Obj-C类名称为ViewController

从Obj-C代码中,您获得的类将取决于您导入的标头。

如果导入两个标题,则表示编译错误。

如果强制两个类具有相同的名称,请使用:

@objc(ViewController) class ViewController: UIViewController {
}

然后是链接器错误。