gpt4 book ai didi

ios - 如何声明也符合协议(protocol)的特定类的属性?

转载 作者:IT王子 更新时间:2023-10-29 05:31:00 35 4
gpt4 key购买 nike

假设我想创建一个属性,它是 UIViewController 的子类,并且还符合协议(protocol) MyDelegateProtocol。在 Objective-C 中我会这样写:

@property (strong, nonatomic) UIViewController<MyDelegateProtocol> *delegate;

但是,我不确定如何在 Swift 中编写它。我知道如何声明符合协议(protocol)的属性或特定类型的属性:

let delegate : MyDelegateProtocol?
let delegate : UIViewController?

但我不太明白如何让它同时做到这两点。如果我尝试这样的事情:

let delegate : UIViewController<MyDelegateProtocol> ?

然后我收到关于Cannot specialize non-generic type 'UIViewController' 的编译器错误。可能是因为我现在正徘徊在泛型领域。我已经尝试查看有关协议(protocol)的 Swift 书籍以及有关协议(protocol)的其他 Stack Overflow 问题,但我还没有找到我正在寻找的内容。

最佳答案

首先,我认为这是一种代码味道。如果您希望委托(delegate)是多个事物,则很可能存在关注点分离问题。

话虽如此,如果您仍然想这样做,Swift 中没有办法。不过,您有几个选择:

  1. 将所需的 UIViewController 方法添加到您的委托(delegate)协议(protocol)(我最喜欢的选项)
  2. 为您的 View Controller 创建一个父类(super class),它是 UIViewController 的子类并实现 MyDelegateProtocol。将您的变量声明为该类型
  3. 存储两个对您的“代表”的引用。一个是 MyDelegateProtocol 的,另一个是 UIViewController 的
  4. 使您的类通用,但这将无法从 Objective-C 访问

关于ios - 如何声明也符合协议(protocol)的特定类的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25172430/

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