Вложенное перечисление вызывает бесконечную компиляцию в Swift - PullRequest
0 голосов
/ 25 августа 2018

У меня есть класс, который я хочу определить следующим образом:

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?

...