2015-10-05 52 views
2

我有一個混合Objective-C和Swift源文件的項目。在Objective-C和Swift中定義的類,哪一個被執行?

foo.h中

@interface Foo : NSObject 
-(void) sayHello;  
@end 

Foo.m

@implementation Foo 
-(void) sayHello { 
    NSLog(@"Hello world, from Objective-C with love."); 
} 
@end 

Foo.swift

class Foo { 
    func sayHello() { 
     print("Hello world, from Swift with love.") 
    } 
} 

它甚至有可能包括在同一Xcode項目既富班?如果是這樣,哪個sayHello方法之一會被執行?

回答

1

這要看情況。如果您的項目位於Swift中,並且您正在導入Objective-C文件,則將執行Swift文件中的Foo類。

如果你是一個Objective-C的項目導入斯威夫特文件的工作,一方面,你知道你將有機會獲得Foo Objective-C類,如果你通過導入:#import "Foo.h"。另一方面,您將使用#import "ModuleName-Swift.h"在Swift中調用該類。 (您需要將ModuleName替換爲項目的模塊名稱)。但是,您不能同時擁有#import "Foo.h"#import "ModuleName-Swift.h";你會得到一個重複的類錯誤(這種類型)。另外,如果你想使用類雨燕文件,Foo必須是NSObject一個子類:

class Foo: NSObject { ... } 
相關問題