大家好,
我最近一直在尝试实现一个基于节点的图形系统,它使用插件在节点之间传递数据。类似于许多 3D 应用程序,如 houdini 和 maya。
在使用 Python 之前,我已经编写了一个类似的系统,并且想尝试使用 Swift 作为我的第一个学习练习。男孩,我在这个问题上跳入了深渊。
我现在被 Swifts Arrays 困住了,因为我想存储一个通用插件列表。每个插件可以有自己的值类型float、int、color、string、Vector Matrix。
我已经阅读了有关类型橡皮擦和不透明类型的信息,但似乎仍然无法以一种可以对它们执行一些算术运算的方式将我的值从列表中获取。
非常感谢所有可能使我朝着这个方向前进的帮助:D
import Foundation
import MetalKit
protocol genericPlug {
associatedtype T
func GetValue() -> T
}
class Plug<T>:genericPlug{
var _value:T?
var value:T {
get{GetValue()}
set(val){
value = val
}
}
func GetValue() -> T{
return _value!
}
init(_ newValue:T){
_value=newValue
}
}
class Node{
var plugs:[genericPlug] = []
init(){
var p1 = Plug<Int>(0)
var p2 = Plug(vector2(1.2, 3.1))
var p3 = Plug([0.0, 3.1, 0.6, 1])
plugs.append(p1)
plugs.append(p2)
plugs.append(p3)
}
func execute(){
// will access the plugs in the array and perform some sort of calculations on them.
plugs[0].value + 1 // should equal 1
plugs[1].value.x + 0.8 // should have x=2.0 y=3.1
plugs[2].value[1] - 0.1 // should equal 3.0
}
}
谢谢大家