我试图将我的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'声明。 –