【发布时间】:2016-01-21 18:08:01
【问题描述】:
我正在尝试在 Swift 中实现某种委托广播器(观察者模式)来注册多个委托。要使用“isEqual”函数,我需要从 NSObject 继承的泛型
为了避免重复代码,我准备了一个通用的 DelegateBroadcaster:
import UIKit
class DelegateBroadcaster<T : NSObject>: NSObject {
var delegates : [T]
override init() {
delegates = []
}
func addDelegate(newDelegate : T) {
delegates.append(newDelegate)
}
func removeDelegate(oldDelegate : T) {
for i in 0...delegates.count-1 {
if (oldDelegate.isEqual(delegates[i])) {
delegates.removeAtIndex(i)
break
}
}
}
}
并将其子类化为任何特定的广播公司。
import UIKit
class NavigationControllerBroadcaster : DelegateBroadcaster<UINavigationControllerDelegate> {
}
但我收到一个奇怪的错误:“DelegateBroadcaster 要求 'UINavigationControllerDelegate' 继承自 NSObject”
这很奇怪,因为苹果 (Class Reference) 的类引用说 UINavigationControllerDelegate 继承自 NSObject。
那么为什么我会收到错误消息?
【问题讨论】:
标签: ios swift generics delegates nsobject