【问题标题】:Swift - Property with type and protocolSwift - 具有类型和协议的属性
【发布时间】:2014-10-26 17:46:29
【问题描述】:

在我的一个 Objective-C 类中,我有一个 UIViewController<UIProfileListHeaderDelegate> 类型的属性,我将如何在 Swift 中表示它?我需要从UIViewControllerUIProfileListHeaderDelegate 访问属性和方法。

谢谢!

【问题讨论】:

  • 我确实试过了,但我可能没有做正确的搜索。我想过使用泛型,但似乎并非如此。我也尝试创建一个 typealias,但我找不到正确的语法。
  • 看起来像 stackoverflow.com/questions/25172430/… 的副本,但那里也没有好的答案。实际上,Google 搜索似乎无法轻松回答问题
  • @codingVoldemort 你对此有什么想法吗?
  • @MarcosDuarte 非常抱歉我误解了这个问题。请编辑,以便更清楚。而且,你无法在 Swift 中做到这一点。在过去的几个月里,我一直在使用 Swift 进行编码,但事实证明,你无法做到这一点。这仅仅是因为它是一个糟糕的代码;它让您的委托对象知道的比需要的更多。

标签: ios xcode swift


【解决方案1】:

处理此问题的快速方法是定义一个协议,其中包含来自UIViewController 的相关方法,并让您的UIProfileListHeaderDelegate 继承自该协议。

使用您关心的方法定义协议:

protocol ViewControllerSubset {
    var view:UIView!
}

声明 UIViewController 实现了协议,不需要实际实现任何东西,因为它已经存在了

extension UIViewController : ViewControllerSubset {}

从那里继承你的协议

protocol UIProfileListHeaderDelegate : ViewControllerSubset

你走了。

如果您不想更改协议的层次结构(或者因为它是系统协议而不能),您可以定义一个包含这两种协议的协议)

protocol EquatableAndComparable : Equatable, Comparable { }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多