我已經被迫最近使用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))
示出了在上面的行中的錯誤。
顯示更多代碼。顯示橋接頭。顯示聲明FSPercentageView的文件。 – matt
哦,你可能想看看我的書,我認爲這比Apple的文檔更清晰:http://www.apeth.com/swiftBook/apa.html#SECbilingual – matt
FSPercentageView.h應該以' @ end',不是花括號。 – matt