【发布时间】:2014-06-05 17:09:45
【问题描述】:
我正在尝试将我的 Objective-C 代码转换为 swift。 在 Objective-C 中,我有以下协议:
@protocol RWOverlaySelectionDelegate <NSObject>
-(void)areaSelected:(UIView *)view allPoints:(NSArray *)points;
@end
并且下面的类有一个引用协议的弱属性(显然它被定义为弱以防止强引用循环)。
@interface RWMapSelectionLayer : UIView
@property(weak, nonatomic) id <RWOverlaySelectionDelegate> delegate;
@end
现在相当于 Swift:
协议:
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?
然后我尝试使用以下语法将我的属性转换为符合RWOverlaySelectionDelegate 的AnyObject:
weak var delegate: AnyObject<RWOverlaySelectionDelegate>?
现在我正在干扰泛型和编译器显示:Cannot specialize non-generic type 'AnyObject' 错误。
在另一个不成功的尝试中,我将其更改为
weak var delegate: AnyObject:RWOverlaySelectionDelegate?
将其读作“Delegate 属于 AnyObject 类型,其中 AnyObject 应符合 RWOverlaySelectionDelegate”
这又是不正确的,因为单个语句中有两个冒号 (:)。
如果有人可以帮助我enforce conformance to a protocol on AnyObject or Any,将不胜感激
【问题讨论】:
标签: swift