簡體   English   中英

ObjectiveC mutableCopy如何快速工作

[英]How ObjectiveC mutableCopy work in swift

我一般是Swift和iOS開發的新手。 最近,我試圖使用Swift編寫一個使用CorePlot(用ObjectiveC編寫)的iOS應用。 我試圖用Swift重寫CorePlot iOS示例代碼(可在http://www.raywenderlich.com/13271/how-to-draw-graphs-with-core-plot-part-2中找到)。 樣本ObjectiveC中有這樣一行:

CPTMutableLineStyle *aaplLineStyle = [aaplPlot.dataLineStyle mutableCopy];
aaplLineStyle.lineWidth = 2.5;

我試圖這樣重寫:

var lineStyle = aaplPlot.dataLineStyle.mutableCopy();
lineStyle.lineColor = aaplColor;

問題是我的Swift版本的代碼中出現編譯錯誤

"cannot assign to 'lineColor' in 'lineStyle'". 

我也收到警告說

"variable lineStyle inferred to have type 'AnyObject', which may be unexpected"

'applePlot'一句, 'applePlot'的類型為CPTLineStyle,在ObjectiveC中定義如下:

@interface CPTLineStyle : NSObject<NSCoding, NSCopying, NSMutableCopying>

@property (nonatomic, readonly) CGLineCap lineCap;
@property (nonatomic, readonly) CGLineJoin lineJoin;
@property (nonatomic, readonly) CGFloat miterLimit;
@property (nonatomic, readonly) CGFloat lineWidth;
@property (nonatomic, readonly) NSArray *dashPattern;
@property (nonatomic, readonly) CGFloat patternPhase;
@property (nonatomic, readonly) CPTColor *lineColor;
@property (nonatomic, readonly) CPTFill *lineFill;
@property (nonatomic, readonly) CPTGradient *lineGradient;
@property (nonatomic, readonly, getter = isOpaque) BOOL opaque;

/// @name Factory Methods
/// @{
+(instancetype)lineStyle;
/// @}

/// @name Drawing
/// @{
-(void)setLineStyleInContext:(CGContextRef)context;
-(void)strokePathInContext:(CGContextRef)context;
-(void)strokeRect:(CGRect)rect inContext:(CGContextRef)context;
/// @}

@end

有人能告訴我我做錯了什么嗎? 如何正確快速地重新編寫代碼行?

謝謝

問題是mutableCopy返回AnyObject。 AnyObject沒有屬性,因此您無法為其分配屬性。 您需要將其強制轉換為CPTMutableLineStyle。

var lineStyle = aaplPlot.dataLineStyle.mutableCopy() as CPTMutableLineStyle
lineStyle.lineColor = aaplColor;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM