Привет всем,
Недавно я пытался реализовать систему графов на основе узлов, которая передает данные между узлами с помощью штекеров. Подобно многим 3D-приложениям, таким как houdini и maya.
Я написал подобную систему, прежде чем использовать Python, и хотел попробовать это с Swift в качестве моего первого учебного упражнения. Мальчик, я прыгнул в глубокий конец на этом.
Я застрял сейчас с массивами Swifts, так как я хотел бы сохранить список штекеров Generi c. Каждый плагин может иметь свой собственный тип значений float, int, color, string, Vector Matrix.
Я прочитал о Type Erasers и непрозрачных типах, но все еще не могу получить мои значения нашего списка в способ, которым я могу выполнить некоторую арифметику c над ними.
Все и любая помощь, которая может направить меня в этом направлении, будет принята с благодарностью: 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
}
}
Спасибо всем