まずはコード
protocol 節系 {
init()
func 鳴らす()
}
extension 節系 {
func 鳴らす() {
print(self)
}
}
protocol フィニッシュ系: 節系 { }
struct ズン: 節系 { }
struct ドコ: 節系 { }
struct キ・ヨ・シ!: フィニッシュ系 { }
let 節集: [節系] = [ズン(), ドコ()]
var ズンカウント = 0
let フィニッシュズンカウント = 4
while true {
let 節 = 節集[random() % 節集.count]
節.鳴らす()
if 節 is ズン {
ズンカウント += 1
} else if 節 is ドコ
&& ズンカウント == フィニッシュズンカウント {
break
} else {
ズンカウント = 0
}
}
キ・ヨ・シ!().鳴らす()
ポイント
-
ズン
とドコ
とキ・ヨ・シ!
を文字列としてハードコーディングしていません。(ホントか??!! - Protocol Extensionで
鳴らす
を実装しています。 -
キ・ヨ・シ!
の最後の!
がアンラップに見える。
出力
...
ズン()
ドコ()
ズン()
ズン()
ズン()
ズン()
ズン()
ドコ()
ドコ()
ズン()
ドコ()
ズン()
ズン()
ズン()
ズン()
ドコ()
キ・ヨ・シ!()
まとめ
ほんとごめんなさい