Вы можете легко вернуть что-то закрытого типа
private enum MyError : Error {
case unexpectedError
}
public struct MyStruct {
static func myError() -> Error {
return MyError.unexpectedError
}
}
..., скрыв его как значение не очень закрытого типа.Это просто подтип.Или: unexpectedError
имеет тип MyError
, но это также и Error
.Вы не можете выставить тип MyError
, но вы можете делать с его значениями все, что захотите, если вы не скажете никому ничего более конкретного, чем «это Error
s».
Точно так же вы можете легко бросить что-то личного типа
public struct MyStruct {
static func throwError() throws {
throw MyError.unexpectedError
}
}
, потому что throw
хочет Error
, вы даете ему MyError
и MyError : Error
.Сама аннотация throws
ничего не говорит о throwError
метании MyError
с;он просто говорит, что может выбросить Error
с в целом.