我試圖將我的Objective-C代碼轉換爲swift。 在Objective-C I有如下方案:對AnyObject或任何類型約束(AnyObject或任何符合協議)
@protocol RWOverlaySelectionDelegate <NSObject>
-(void)areaSelected:(UIView *)view allPoints:(NSArray *)points;
@end
和以下類有引用該協議(顯然它定義爲弱以防止發生強基準週期)的弱屬性。
@interface RWMapSelectionLayer : UIView
@property(weak, nonatomic) id <RWOverlaySelectionDelegate> delegate;
@end
現在斯威夫特相當於:
協議:
protocol RWOverlaySelectionDelegate {
func areaSelected(view:UIView,points:CGPoint[])
}
並具有符合該協議的屬性的類:
class RWMapSelectionLayer:NSObject {
weak var delegate:RWOverlaySelectionDelegate?
}
但我在此行中得到'weak' cannot be applied to non-class type 'RWOverlaySelectionDelegate'
編譯時間錯誤:weak var delegate:RWOverlaySelectionDelegate?
然後我試着用以下的語法來我的財產轉換爲AnyObject
符合RWOverlaySelectionDelegate
:Cannot specialize non-generic type 'AnyObject'
錯誤:
weak var delegate: AnyObject<RWOverlaySelectionDelegate>?
現在,我與泛型和編譯器顯示的干擾。
在另一個不成功的嘗試我改成了
weak var delegate: AnyObject:RWOverlaySelectionDelegate?
它讀作「代表是類型AnyObject其中AnyObject應符合RWOverlaySelectionDelegate」
這是因爲兩個冒號的再次不正確(:)在一個單一的聲明。
希望如果有人能幫助我enforce conformance to a protocol on AnyObject or Any
在2015年1月的swift中,這是通過'protocol MyProtocolName:class {...}'完成的,而不是使用'@ class_protocol'聲明。 –