【发布时间】:2015-09-09 10:14:37
【问题描述】:
我有下一个问题:
我有一个类可以包含一些不同类型的数据,但在编译时数据的类型是未知的。
看起来像这样
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。
【问题讨论】:
标签: ios swift cocoa design-patterns 3d