2015-10-09 81 views
-1

我已經被迫最近使用SWIFT Objective-C語言的一些類使用Objective-C類,我已經搜查,這個發現Apple doc在斯威夫特類

要導入Objective-C代碼爲斯威夫特相同的目標

1)在您的Objective-C橋接頭文件中,導入您想暴露給Swift的每個Objective-C 頭。例如:

#import "XYZCustomCell.h" 
#import "XYZCustomView.h" 
#import "XYZCustomViewController.h" 

2)在生成設置,在夫特編譯器 - 代碼生成,確保目標C橋接報頭 構建設置下具有對橋接報頭文件的路徑。路徑 應該與您的項目有關,類似於在Build Settings中指定Info.plist 路徑的方式。在大多數情況下,您不應該 需要修改此設置。

在 中列出的任何公共Objective-C頭文件對於Swift都是可見的。 Objective-C 功能將自動在目標 內的任何Swift文件中提供,而不需要任何導入語句。使用您的自定義 Objective-C代碼與您在系統 類中使用的Swift語法相同。

我跟着步驟並添加初始代碼到我的SWIFT類:

let percentageView: FSPercentageView = FSPercentageView(frame: CGRectMake(15, 65, 300, 300)) 

但是我得到消息的錯誤:使用未聲明的類型「FSPercentageView」的。

我在swift中搜索了使用objective-c的這個錯誤,但是我沒有找到任何有用的答案。 我檢查了橋頭文件路徑,它似乎很好。

我希望你的建議能解決我的問題。

UPDATE:

我的橋接-Header.h

#import "FSPercentageView.h" 

我FSPercentageView.h級別:

#import <Foundation/Foundation.h> 

#import "MCCore.h" 

@class FCPercentageView; 

typedef enum { 
    FSPercentageViewTextStyleAutomaticShowsPercentage, 
    FSPercentageViewTextStyleUserDefined 
} FSPercentageViewTextStyle; 



@interface FSPercentageView : MCNewCustomLayeredView 

/* 
Sets the percentage of the view. 
*/ 
@property (nonatomic) CGFloat percentage; 

/* 
Sets the percentage of the view. 
*/ 
@property (nonatomic) CGFloat initialPercentage; 

/* 
Defines the border percentage for both filled and unfilled portions. 
*/ 
@property (nonatomic) CGFloat borderPercentage; 

/* 
The label of the text in the center of the doughnut. 
*/ 
@property (nonatomic, retain) UILabel *textLabel; 

/* 
The color for the filled portion of the doughnut. 
*/ 
@property (nonatomic, retain) UIColor *fillColor; 

/* 
The color for the unfilled portion of the doughnut. 
*/ 
@property (nonatomic, retain) UIColor *unfillColor; 
} 

和FSPercentageView.m的初始段:

#import "FSPercentageView.h" 
#import "FSNewCustomLayeredView+FSCustomLayeredViewSubclass.h" 

typedef enum { 
    FSPercentageViewStateNormal, 
    FSPercentageViewStatePushed 
} FSPercentageViewTouchState; 

@interface FSPercentageView() 

@property (nonatomic, retain) UIView *centerView; 
@property (nonatomic) FSPercentageViewTouchState touchState; 

@end 

@implementation FSPercentageView 

- (void)setDefaults 
{ 
    [super setDefaults]; 

    self.linePercentage     = 0.15; 
    self.borderPercentage    = 0; 
    self.showTextLabel     = YES; 
    self.animationDuration    = 0.5; 
    self.unfillColor     = [MCUtil iOS7DefaultGrayColorForBackground]; 
    self.borderColorForFilledArc  = [UIColor blackColor]; 
    self.borderColorForUnfilledArc  = [UIColor clearColor]; 
    self.borderPercentageForFilledArc = -1; 
    self.borderPercentageForUnfilledArc = -1; 
    self.adjustsFontSizeAutomatically = YES; 
    self.roundedImageOverlapPercentage = 0; 
    self.touchState      = FSPercentageViewStateNormal; 
    self.gradientColor1     = [MCUtil iOS7DefaultBlueColor]; 
    self.gradientColor2     = [MCUtil iOS7DefaultGrayColorForBackground]; 

    _percentage       = 0.0; 
    _initialPercentage     = 0.0; 

    _centerView = [[UIView alloc] init]; 
    _textLabel = [[UILabel alloc] init]; 
} 

- (void)willDrawSublayers 
{ 
    if (!self.fillColor) { 
     self.fillColor = self.tintColor; 
    } 
} 

- (Class)classForSublayers { 
    return [MCSliceLayer class]; 
} 

和SWIFT代碼:

let percentageView: FSPercentageView = FSPercentageView(frame: CGRectMake(15, 35, 289, 311)) 

示出了在上面的行中的錯誤。

+1

顯示更多代碼。顯示橋接頭。顯示聲明FSPercentageView的文件。 – matt

+0

哦,你可能想看看我的書,我認爲這比Apple的文檔更清晰:http://www.apeth.com/swiftBook/apa.html#SECbilingual – matt

+0

FSPercentageView.h應該以' @ end',不是花括號。 – matt

回答

1

我希望你的建議能解決我的問題。

但是你還沒有提供任何信息,所以沒有任何建議是可能的。蘋果說的是真的;我向你保證這個功能確實有效。問題只能是你沒有遵循你自己引用的方向。

+0

我已添加我的代碼。你可以幫我嗎? –

0

我發現我的代碼有問題。

我在我的應用程序中有兩個目標,我也使用測試單元。 由於在所有提到的目標中添加了我的swift代碼,項目需要有3個與每個目標相關的橋接類,並且還必須導入其中的所有標題。其實紅色的信息是關於單元測試橋接文件。

現在,我從測試單元中刪除了我的swift類,並且代碼編譯和運行沒有任何問題。