モノトーンの伝説日記

Apex Legends, Splatoon, Programming, and so on...

Swift 5.1 のコンパイラーバグを引いた話

 こんな不具合報告してもいいのかよくわからないので,報告はしてません;;

継承使いまくりのクラスで release ビルドのみエラーを吐く

protocol MyProtocol {
  associatedtype RealmObject: Object
  associatedtype RealmCollectionObject: RealmCollection where RealmCollectionObject.ElementType == RealmObject
}

class SuperBase { }

class Base: SuperBase, MyProtocol {
  typealias RealmObject = SampleEntity
  typealias RealmCollectionObject = List
}

class FunctionalBase: Base {
  // 任意のコード
}

final class VariationA: FunctionalBase { }
final class VariationB: FunctionalBase { }

 これはかなり抽象的にしたコードですが,Base で「invalid redeclaration of RealmCollectionObject」と出る。

 おそらく最適化のフェーズで RealmCollectionObject が複数箇所に定義されてしまった,って感じなんでしょうけど。

まとめ

 Swift のコンパイラー最近色々不具合多くて本当に困る……

 Swift 5.0 でも Eureka を static framework にしたので正しくコードが入ってなかったりとか……

 Swift 5.1 でもこうなるとか,今まで問題なかったのが問題になるっていう…… しんどいw