UIScrollView有一个符合UIScrollViewDelegate的委托属性
protocol UIScrollViewDelegate : NSObjectProtocol {
//...
}
class UIScrollView : UIView, NSCoding {
unowned(unsafe) var delegate: UIScrollViewDelegate?
//...
}UICollectionView用不同类型的UICollectionViewDelegate重写此属性。
protocol UICollectionViewDelegate : UIScrollViewDelegate, NSObjectProtocol {
//...
}
class UICollectionView : UIScrollView {
unowned(unsafe) var delegate: UICollectionViewDelegate?
//...
}当我试图用我的协议覆盖UIScrollViews委托时,如下所示:
protocol MyScrollViewDelegate : UIScrollViewDelegate, NSObjectProtocol {
//...
}
class MyScrollView: UIScrollView {
unowned(unsafe) var delegate: MyScrollViewDelegate?
}编译器给我两个警告:
如何子类UIScrollView和覆盖类型的委托属性(即使用自定义委托协议)?
发布于 2015-05-27 16:11:50
以下是在Swift中更改重写属性类型的解决方案。当您需要扩展委托协议时,它特别有用。
@objc protocol ExtendedUIScrollViewDelegate: UIScrollViewDelegate {
func someNewFunction()
}
class CustomScrollView: UIScrollView {
weak var delegateInterceptor: ExtendedScrollViewDelegate?
override var delegate: UIScrollViewDelegate! {
didSet {
if let newValue = delegate {
let castedDelegate = unsafeBitCast(delegate, ExtendedScrollViewDelegate.self)
delegateInterceptor = castedDelegate
}
else {
delegateInterceptor = nil
}
}
}
}这与Swift 1.2版本的测试一样有效。希望能帮上忙。
https://stackoverflow.com/questions/25724709
复制相似问题