【问题标题】:Declare metatype that is a subclass and conforms to a protocol in Swift 4在 Swift 4 中声明作为子类并符合协议的元类型
【发布时间】:2018-04-24 03:49:44
【问题描述】:

这不是 In Swift, how can I declare a variable of a specific type that conforms to one or more protocols? 的副本。这个问题是关于一个特定的用例,我需要一个元类型,但如何做到这一点绝对不明显。

Swift 4 允许声明一个变量,它是一个子类并且符合多个协议:

var myVariable: MyClass & MyProtocol & MySecondProtocol

我需要这样的一致性,但不是为了实例,而是为了类型本身。但是对于以下语法:

var classForCell: UICollectionViewCell.Type & AdditionalHeightable.Type

给我这个错误:

非协议、非类类型“UICollectionViewCell.Type”不能在协议约束类型中使用

如何在 Swift 4 中声明一个作为子类并符合协议的元类型?

【问题讨论】:

    标签: swift swift4


    【解决方案1】:

    要声明一个类型是子类并符合 Swift 4 中的协议,您可以使用以下语法:

    var classForCell: (UICollectionViewCell & AdditionalHeightable).Type
    

    【讨论】:

    • 我正在回答我自己的问题,但我花了几个小时才找到答案。希望这对某人有帮助。我在玩泛型,这也可以表达,但它在其他方面受到限制。
    • 请将其标记为正确答案,即使它是您对问题的解决方案。
    • 有些惊讶的是,这样的代码甚至可以编译,更不用说工作了! Swift 编译器团队可能会在这里做点什么... ;)
    • 当我尝试将变量分配为委托时,我收到此错误:Cannot assign value of type '(UIViewController & ExperienceDelegate).Type' to type 'ExperienceDelegate?' 知道如何处理这个错误吗?
    • 您正在分配一个预期实例的类型。在您的情况下,您可能不需要(UIViewController & ExperienceDelegate).Type,而是直接使用UIViewController & ExperienceDelegate
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-30
    • 1970-01-01
    相关资源
    最近更新 更多