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