Avatar
色々な型を Global に ExpressibleByIntegerLiteral 適合させると予期できない暗黙キャストが起きてカオスになるので、特定の型を fileprivate に ExpressibleByIntegerLiteral に適合できたらいいと思ったのですが、 conditional conformance があると fileprivate extension できないんですね… これは何故なのでしょう🙄 特に ExpressibleByIntegerLiteral な型を wrap する型を再び ExpressibleByIntegerLiteral にして、init では内部の型に丸投げする多くて,↓ こういう protocol を作って必要に応じて適合させられたらいいと思ったのですが…🙄 public protocol InheritingIntegerLiteralExpression: ExpressibleByIntegerLiteral where IntegerLiteralType == Inheritee.IntegerLiteralType { associatedtype Inheritee: ExpressibleByIntegerLiteral init(_ inheritee: Inheritee) } extension InheritingIntegerLiteralExpression { public init(integerLiteral value: IntegerLiteralType) { self.init(Inheritee(integerLiteral: value)) } } (edited)
1:45 PM
使うときは fileprivate extension Polynomial: ExpressibleByIntegerLiteral, InheritingIntegerLiteralExpression where BaseRing: ExpressibleByIntegerLiteral { typealias Inheritee = BaseRing } とするイメージ. (edited)
1:48 PM
conditional conformance つきだと extension にアクセス修飾子がつけられないのは前向きな理由があるんでしょうか? (edited)