gpt4 book ai didi

swift - 如何在 Swift 中拥有具有泛型类型和多重继承的变量?

转载 作者:搜寻专家 更新时间:2023-11-01 05:41:39 24 4
gpt4 key购买 nike

我有这个协议(protocol)、类和一个采用必须符合两者的泛型的类。

我想构建一个包含此类类数组的注册表,但如何在注册表中定义满足编译器要求的变量?

考虑这个例子:

protocol SomeProtocol {

}

class SomeClass {

}

class AnotherClass<R, P where P:SomeProtocol, P:SomeClass> {

}

class Registry {

private init() {}

// This is not allowed since the second generic doesn't conform to neither required class
var registry:[AnotherClass<AnyObject, AnyObject>] = []

}

最佳答案

是这样的

import UIKit
protocol SomeProtocol {

}

class SomeClass {

}

class AnotherClass<R, P where P:SomeProtocol, P:SomeClass> {

}

class TheClass : SomeClass, SomeProtocol {}

class Registry {

private init() {}

var registry:[AnotherClass<AnyObject, TheClass>] = []

}

您需要定义一个继承SomeClassSomeProtocol 的类。 AnyObject 不继承自 SomeClassSomeProtocol,这就是您收到错误的原因。

更新减少限制

是这样的

import UIKit
protocol SomeProtocol {

}

class SomeClass {

}

class AnotherClass<R, P where P:SomeProtocol, P:SomeClass> {

}

class TheClass : SomeClass, SomeProtocol {}

class Registry<T, where T:SomeProtocol, T:SomeClass> {

private init() {}

var registry:[AnotherClass<AnyObject, T>] = []

}

更新 2

然而,最终你会得到类似的东西

Registry<TheClass>

因为泛型最终需要一个具体的类。

您可以做的是在运行时强制执行类型 - 您需要将 @objc 添加到您的协议(protocol)中 - 通过 is。另一种方法是废弃泛型并使用接口(interface)或基类。

关于swift - 如何在 Swift 中拥有具有泛型类型和多重继承的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29141778/

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