>But I don't want the sprite type to say "Extends Position" because that's just silly from an object point of view, and it does not help me if I have a bunch of different types that I want to include as fields in this way.
You are thinking wrong here Swift ;) Of course it's silly for an object like for example sprite to extend something that is just position. It doesn't make sense. That's why you don't call it Position, you call it 2dObject and give this 2dObject all properties that are needed for it, like x and y.
Then when you make Sprite extend 2dObject it makes sens and also Sprite now has access to x and y and any other field that 2dObject has that is relevant to Sprite.
You just don't create a class/type called position since it's not logical. you create abstract object that has all properties that all of it's children have same.
If you think like that then you don't have the logical problem where some object extends Position since it's unlogical ;)
You are thinking wrong here Swift ;) Of course it's silly for an object like for example sprite to extend something that is just position. It doesn't make sense. That's why you don't call it Position, you call it 2dObject and give this 2dObject all properties that are needed for it, like x and y.
Then when you make Sprite extend 2dObject it makes sens and also Sprite now has access to x and y and any other field that 2dObject has that is relevant to Sprite.
You just don't create a class/type called position since it's not logical. you create abstract object that has all properties that all of it's children have same.
If you think like that then you don't have the logical problem where some object extends Position since it's unlogical ;)