gpt4 book ai didi

ios - 通用类类型不符合 Any

转载 作者:可可西里 更新时间:2023-11-01 00:56:00 25 4
gpt4 key购买 nike

我在将泛型类存储在数组中时遇到问题。我应该如何在保持对原始类型的引用的同时为我的数组格式化类型(我知道我可以做 var myClasses: [Any] = [] 但是当从我的数组中检索变量时这不会有帮助:(

示例如下:

import UIKit

protocol Reusable { }

extension UITableViewCell: Reusable { }
extension UICollectionViewCell: Reusable { }

class SomeClass<T> where T: Reusable {
init() { }
}

var myClasses: [SomeClass<Reusable>] = []

myClasses.append(SomeClass<UITableViewCell>())
myClasses.append(SomeClass<UICollectionViewCell>())
myClasses.append(SomeClass<UITableViewCell>())
myClasses.append(SomeClass<UICollectionViewCell>())

编辑: 澄清一下,我以集合和表格单元格为例,我实际上并不打算将它们存储在一起 :)

编辑 2 var myClasses: [SomeClass<Reusable>] = []产生错误:using 'Reusable' as a concrete type conforming to protocol 'Reusable' is not supported

编辑 3 var myClasses: [SomeClass<AnyObject>] = []产生错误:type 'AnyObject' does not conform to protocol 'Reusable'

最佳答案

我认为您可以创建某种Holder 类来接受和检索您的对象:

class Holder {

lazy var classes: [Any] = []

func get<T>(_ type: T.Type) -> [T]? {
return classes.filter({ $0 is T }) as? [T]
}

}

主要部分:

let holder = Holder()
holder.classes.append(SomeClass<UITableViewCell>())

if let someTableViewCells = holder.get(SomeClass<UITableViewCell>.self)?.first {
// or filter out again to get specific SomeClass of UITableViewCell
print(someTableViewCells)
}

或者没有 holder 类:

var classes: [Any] = []
classes.append(SomeClass<UITableViewCell>())

if let someTableViewCell = classes.filter({ $0 is SomeClass<UITableViewCell> }).first as? SomeClass<UITableViewCell> {
print(someTableViewCell)
}

关于ios - 通用类类型不符合 Any,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48226381/

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