LoginSignup
13
11

More than 5 years have passed since last update.

PlantUML で Swift のクラス図を書いてみる

Last updated at Posted at 2017-03-14

PlantUML 使ったらテキストでクラス図書けて素敵やんってことで、Swift の標準ライブラリをちょっとだけ書いてみた。継承、準拠関係を見るだけなら protocol は interface (ただし、シンボルは P)、struct は class (ただし、シンボルは S)としてこんな感じですかね?

@startuml
' s(構造体, ...) と書くためのマクロ
!definelong s(x)
class x <<(S,orange)>> {
}
!enddefinelong

!definelong s(x,y1)
class x <<(S,orange)>> {
}
y1 <|-- x
!enddefinelong

!definelong s(x,y1,y2)
class x <<(S,orange)>> {
}
y1 <|-- x
y2 <|-- x
!enddefinelong

!definelong s(x,y1,y2,y3)
class x <<(S,orange)>> {
}
y1 <|-- x
y2 <|-- x
y3 <|-- x
!enddefinelong

!definelong s(x,y1,y2,y3,y4)
class x <<(S,orange)>> {
}
y1 <|-- x
y2 <|-- x
y3 <|-- x
y4 <|-- x
!enddefinelong

!definelong s(x,y1,y2,y3,y4,y5)
class x <<(S,orange)>> {
}
y1 <|-- x
y2 <|-- x
y3 <|-- x
y4 <|-- x
y5 <|-- x
!enddefinelong

' p(プロトコル, ...) と書くためのマクロ
!definelong p(x)
interface x <<(P,violet>> {
}
!enddefinelong

!definelong p(x,y1)
interface x <<(P,violet>> {
}
y1 <|-- x
!enddefinelong

!definelong p(x,y1,y2)
interface x <<(P,violet>> {
}
y1 <|-- x
y2 <|-- x
!enddefinelong

!definelong p(x,y1,y2,y3)
interface x <<(P,violet>> {
}
y1 <|-- x
y2 <|-- x
y3 <|-- x
!enddefinelong

!definelong p(x,y1,y2,y3,y4)
interface x <<(P,violet>> {
}
y1 <|-- x
y2 <|-- x
y3 <|-- x
y4 <|-- x
!enddefinelong

!definelong p(x,y1,y2,y3,y4,y5)
interface x <<(P,violet>> {
}
y1 <|-- x
y2 <|-- x
y3 <|-- x
y4 <|-- x
y5 <|-- x
!enddefinelong

!definelong p(x,y1,y2,y3,y4,y5,y6)
interface x <<(P,violet>> {
}
y1 <|-- x
y2 <|-- x
y3 <|-- x
y4 <|-- x
y5 <|-- x
y6 <|-- x
!enddefinelong

!definelong p(x,y1,y2,y3,y4,y5,y6,y7)
interface x <<(P,violet>> {
}
y1 <|-- x
y2 <|-- x
y3 <|-- x
y4 <|-- x
y5 <|-- x
y6 <|-- x
y7 <|-- x
!enddefinelong

' 型定義
p(Comparable, Equatable)
p(ExpressibleByIntegerLiteral)
p(SignedNumber, Comparable, ExpressibleByIntegerLiteral)
p(AbsoluteValuable, SignedNumber)
p(CustomStringConvertible)
p(ExpressibleByFloatLiteral) 
p(Equatable) 
p(Hashable, Equatable) 
p(Stridable, Comparable)
p(IntegerArithmetic, Comparable)
p(BitwiseOperations)
p(Integer, ExpressibleByIntegerLiteral, CustomStringConvertible, Hashable, IntegerArithmetic, BitwiseOperations, Equatable, Stridable)
s(Decimal, AbsoluteValuable, CustomStringConvertible, ExpressibleByFloatLiteral, Hashable, Stridable)
p(SignedInteger, Integer, SignedNumber)
p(UnsignedInteger, Integer)

@enduml

test.png

13
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
11