gpt4 book ai didi

self 是子类的 Swift 协议(protocol)扩展

转载 作者:行者123 更新时间:2023-11-28 06:28:31 24 4
gpt4 key购买 nike

是否有可能实现一个协议(protocol)或协议(protocol)扩展,指定该协议(protocol)将仅用于类并且这些类具有父类(super class)?

如果是这样,我是否可以利用它来创建一个函数,该函数向下迭代一个类的父类(super class)以收集它们各自存储一个公共(public)变量的所有数据?

换句话说,在下面的示例中,是否可以创建一个扩展来执行第二个 BaseType 扩展伪代码试图执行的操作,以便在末尾 allVals = ["core", "middle", "顶部"] ?

import Foundation

protocol BaseType: class {
var data: [String] { get }
var all: [String] { get }
}

extension BaseType {
var all: [String] {
return data
}
}

// Is the intent of this extension realistic?
extension BaseType where Self.super is BaseType {
var all: [String] {
return data + super.all
}
}

class CoreDT: BaseType {
var core: String = "core"
var data: [String] { return [core] }
}


class MiddleDT: CoreDT {
var middle: String = "middle"
override var data: [String] { return [middle] }
}

class TopDT: MiddleDT {
var top: String = "top"
override var data: [String] { return [top] }
}

let allVals = TopDT().all

print(allVals)

最佳答案

简单的答案是:

你无法做到这一点。

详细一:

您只能通过在其上方实现 NSObjectProtocol 来实现在协议(protocol)内部使用父类(super class)的功能。但是,从 Objective C 到 Swift 的桥接函数的问题就会出现。解决方案是使该协议(protocol)成为@objc 协议(protocol),但您将无法使用默认实现扩展它。

关于 self 是子类的 Swift 协议(protocol)扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41053907/

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