Я ударил некоторые запутанные сообщения об ошибках от компилятора Swift ('A' is not convertible to 'A'
, 'E' is not identical to 'E'
), и я думаю, что это связано с тем, что я вводил идентичные имена переменных типа в двух областях, где одна область была вложена внутри другой.Какова область переменных типа?
Я хотел бы получить более полное представление о том, как работают переменные типа, и поэтому у меня есть несколько взаимосвязанных вопросов:
- что объем переменных типа в Swift?
- ow - это область, на которую влияют вложенные типы и методы?
- Может ли тип переменных затенять?
- Что происходит, когда вложенный метод вводит переменную типа с тем же именем, что и класс-оболочка?
- возможно ли что-то вроде
method2
(см. Ниже)? (Мой XCode терпел крах, и я не был в состоянии понять это)
Вот несколько примеров, чтобы показать, что я пытаюсь выяснить:
class MyClass<A> {
func method1<A>(a:A) -> A {
// what does A refer to here?
return a;
}
class func staticmethod<A>(a:A) -> A {
// what does A refer to here?
return a;
}
func method2() -> ((A) -> A) {
// is this even possible?
// I'm not sure how to write method2's type !
func id<A>(a:A) -> A {
return a;
}
return id;
}
}