gpt4 book ai didi

ios - Swift 委托(delegate)不继承 NSObject

转载 作者:可可西里 更新时间:2023-11-01 01:00:19 24 4
gpt4 key购买 nike

我正在尝试在 Swift 中实现某种委托(delegate)广播(观察者模式)以注册多个委托(delegate)。要使用“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。

那么为什么会出现错误?

最佳答案

您混淆了类 NSObject(NSObject class) 和协议(protocol) NSObject(NSObject protocol,在 Swift 中称为 NSObjectProtocol)。

UINavigationControllerDelegate 是一个协议(protocol),不能继承自类 NSObject,它继承自 NSObjectProtocol(将您的文档切换到 Swift,您将看到区别)。

关于ios - Swift 委托(delegate)不继承 NSObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34931128/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com