gpt4 book ai didi

ios - swift 。是否可以在运行时确定属性时间

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

我有下一个问题:

我有一个类,它可以包含一些不同类型的数据,但数据的类型在编译时未知。

看起来像这样

class Data {
var dataType: PodDataType = PodDataType.None

var componentsCount: UInt32 = 0

var stride: UInt32 = 0

var data // the data type of this field is unknown until dataType property is initialized
}

我还有另一个类,它有多个 Data 实例,如下所示:

class Mesh {

var verticesCount: UInt32 = UInt32.max

var facesCount: UInt32 = UInt32.max

var UVWChannelsCount: UInt32 = UInt32.max

var vertexIndexes: Data?

var stripLength: UInt32 = UInt32.max

var stripsCount: UInt32 = UInt32.max

var vertex: Data?

var normals: Data?

var tangents: Data?

var binormals: Data?

// and so on ...
}

每次我创建一个新的数据对象时,它的“数据”字段中都应该包含不同的数据类型。解决此类问题的最佳方法是什么?

我的想法:1) AbstractFactory 模式:我可以创建基类 Data 和许多子类,如 DataInt、DataFloat 等。但这意味着我需要为每个支持类型(int32、int8 和 15 种以上类型)创建子类。

2) 泛型:我可以像 Data 类一样定义 Data,但之后我的 Mesh 类就会依赖于 Data 类,因为没有类型参数就无法定义泛型类。

3) UnsafePointer 我可以使用此指针存储数据,但我不确定如果我从中读取信息的 NSData 对象被释放,数据是否会持续存在。另外,从 UnsafePointer 到实际类型的性能类型转换又如何。

针对这种情况的任何其他做法都受到高度赞赏。

附注我正在为存储 3D 图形数据的 Pod 文件开发解析器。POD 文件格式规范可参见 here作为引用。

最佳答案

为什么不使用Any?:

class Data {
var dataType: PodDataType = PodDataType.None
var componentsCount: UInt32 = 0
var stride: UInt32 = 0
var data: Any?
}

但我认为这是 enum with associated values 的良好用例:

enum PodData {
case Ints([Int])
case Floats([Float])
// ...
case None
}

关于ios - swift 。是否可以在运行时确定属性时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32476818/

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