У меня есть класс, который я хочу определить следующим образом:
class MockUrlContentLoader : MockObject<MockUrlContentLoader.FunctionCall>, UrlContentLoader {
enum FunctionCall : Hashable {
case createString(fromContentsOf: URL, encoding: String.Encoding)
}
func createString(fromContentsOf url: URL, encoding enc: String.Encoding) throws -> String {
if let responseValue = try executeThrowableFunctionCall( FunctionCall.createString(fromContentsOf: url, encoding: enc) ) {
return responseValue as! String
} else {
return ""
}
}
}
Что приводит к бесконечной компиляции в Xcode 9.
Когда я переопределяю класс следующим образом, код компилируется и запускается, как и ожидалось:
enum MockUrlContentLoaderFunctionCall : Hashable {
case createString(fromContentsOf: URL, encoding: String.Encoding)
}
class MockUrlContentLoader : MockObject<MockUrlContentLoaderFunctionCall>, UrlContentLoader {
func createString(fromContentsOf url: URL, encoding enc: String.Encoding) throws -> String {
if let responseValue = try executeThrowableFunctionCall( MockUrlContentLoaderFunctionCall.createString(fromContentsOf: url, encoding: enc) ) {
return responseValue as! String
} else {
return ""
}
}
}
Я предпочитаю первую форму, так как она кажется более читаемой. Почему бы Xcode не скомпилировать первую форму? Есть ли какая-то ошибка в компиляторе Swift?