我正在尝试创建一个协议,该协议接受从NSObject子类化的对象:protocol ProtocolExample { func willDisplay<T: NSObject>(object: T?)}class TableViewCell: UITableViewCell,ProtocolExample { func willDisplay<T>(object: T?) where T : NSObject { } func willDisplay(object: AMDObject?) { }}class AMDObject: NSObject {}所以我的问题是我该如何应用,我只需要添加第二个willDisplay方法,而不是第一个。在tableviewcell的情况下,我如何确定我的T当前为AMDObject类型(就像T现在为AMDObject) 最佳答案 ProtocolExample中要求的签名应理解为:“接受willDisplay的函数object,只要T?继承自”。这个定义保证了我可以编写如下函数:func displayThings(in example: ProtocoExample) { example.willDisplay(NSArray()) example.willDisplay(NSObject())}但是,在您的实现中,如果我写以下内容,将会发生什么:let cell: TableViewCell = // ...displayThings(in: cell)然后,T将无法调用NSObject,因为displayThings只能处理example.willDisplay(NSArray())和TableViewCell。如果您自己可以控制协议,则可以使用willDisplay来实现:protocol ProtocolExample { associatedtype DisplayObject: NSObject func willDisplay(object: DisplayObject?)}class TableViewCell: UITableViewCell, ProtocolExample { // Implicit typealias DisplayObject = AMDObject func willDisplay(object: AMDObject?) { }}但是,根据您使用AMDObject的方式,添加此associatedtype可能不是一个简单的解决方案。 10-08 04:48