When using Generics with Protocols I get a compilation error depending on whether or not conformance to a protocol is defined in the same file or not.
Error:
Type 'Car.ItemID' (aka 'CarID') does not conform to protocol 'P2'
I have 2 swift files:
- CarID.swift
- CreateCars.swift
Observations:
- I get the error when extension CarID : P2 {} is defined in CarID.swift
- I don’t get the error when extension CarID : P2 {} is defined in CreateCars.swift as shown in the comments below.
Tested On:
- Xcode 9.0 (9A235) - GM
- Command Line project / iOS project
CarID.swift:
import Foundation
protocol P1 {
associatedtype ItemID
}
class Car : P1 {
typealias ItemID = CarID
}
//extension CarID : P2 {} //Error wouldn't occur if this line is uncommented and the line in CarID.swift is commented out
protocol P2 {}
class CreateItems<Something : P1>
where Something.ItemID : P2 {}
class CreateCars : CreateItems<Car> {} //Error: Type 'Car.ItemID' (aka 'CarID') does not conform to protocol 'P2'
extension CreateCars {}
CreateCars.swift:
import Foundation
class CarID {}
extension CarID : P2 {} //If this line is moved to CreateCars.swift the error vanishes away
Sorry about the typo (filenames for the code were mentioned wrong).
The corrected filenames are as follows (problem still occurs):
Question:
- Why does the error occur when extension CarID : P2 {} is defined in CarID.swift ?
CreateCars.swift:
import Foundation
protocol P1 {
associatedtype ItemID
}
class Car : P1 {
typealias ItemID = CarID
}
//extension CarID : P2 {} //Error wouldn't occur if this line is uncommented and the line in CarID.swift is commented out
protocol P2 {}
class CreateItems<Something : P1>
where Something.ItemID : P2 {}
class CreateCars : CreateItems<Car> {} //Error: Type 'Car.ItemID' (aka 'CarID') does not conform to protocol 'P2'
extension CreateCars {}
CarID.swift:
import Foundation
class CarID {}
extension CarID : P2 {} //If this line is moved to CreateCars.swift the error vanishes away
Thanks and regards,
Muthu
···
On 17 Sep 2017, at 10:55 AM, somu subscribe via swift-users <swift-users@swift.org> wrote:
Hi,
When using Generics with Protocols I get a compilation error depending on whether or not conformance to a protocol is defined in the same file or not.
Error:
Type 'Car.ItemID' (aka 'CarID') does not conform to protocol 'P2'
I have 2 swift files:
- CarID.swift
- CreateCars.swift
Observations:
- I get the error when extension CarID : P2 {} is defined in CarID.swift
- I don’t get the error when extension CarID : P2 {} is defined in CreateCars.swift as shown in the comments below.
Tested On:
- Xcode 9.0 (9A235) - GM
- Command Line project / iOS project
CarID.swift:
import Foundation
protocol P1 {
associatedtype ItemID
}
class Car : P1 {
typealias ItemID = CarID
}
//extension CarID : P2 {} //Error wouldn't occur if this line is uncommented and the line in CarID.swift is commented out
protocol P2 {}
class CreateItems<Something : P1>
where Something.ItemID : P2 {}
class CreateCars : CreateItems<Car> {} //Error: Type 'Car.ItemID' (aka 'CarID') does not conform to protocol 'P2'
extension CreateCars {}
CreateCars.swift:
import Foundation
class CarID {}
extension CarID : P2 {} //If this line is moved to CreateCars.swift the error vanishes away