It depends on what you do and what each character does besides using the components.
Using gameplayKit I would probably prefer to create entities class rather than just classes.
Did you consider just using 1 player entity and than when you change character you just remove/add components for that character.
Say you change from the attacking one to the jumping one, you could remove the attack component
player.removeComponent....
and add the jumping component
let jumpingComponent = ...
player.addComponent(jumpingComponent)
In general you want to make sure your components are as flexible and generic as possible.
For example your spriteComponent should take an image string/texture in its init method so you can add the same component to each entity but use a different image.
class SpriteComponent: GKComponent {
let node: SKSpriteNode
init(texture: SKTexture) {
node = SKSpriteNode(texture: texture, color: SKColor.clearColor(), size: texture.size())
}
}
Now you can add the same component to each character while using a different image
let character1Texture = SKTexture(imageNamed: "Character 1 image"
let spriteComponent = SpriteComponent(texture: character1Texture)
addComponent(spriteComponent)
Same goes for your animations and other components.
The way I treat it is like this.
Say I have a game where I have 10 types of enemies that are more or less the same. I would probably try to just have 1 enemy entity class will all the components used by all 10 enemies. Than I would add the relevant components that make each unique dynamically or based on a enumType that I would pass in the init method.
On the other hand say I have 3 main characters that all do very unique things than maybe its easier and cleaner to just create 3 entity classes. Also dont forget about subclassing, so you can create 1 entity class with all the shared components and than subclass the other 2 entities.
Apple does that in DemoBots, where they have a TaskBot entity and than a FlyingBoy entity and a GroundBot entity that are both subclasses of TaskBot.
Its really up to you.