Swift Generic Неизвестный член с расширением протокола

Если у меня есть следующий код:

protocol ObjectType {
 var title: String { get set }
}
extension ObjectType {
 var objectTypeString: String {
 let mirror = Mirror(reflecting: self)
 return "\(mirror.subjectType)"
 }
}
class Object: ObjectType {
 var title = ""
}
class SomeOtherClass {
 private func someFunc<t: object="">(object: T) {
 print(object.objectTypeString)
 }
}
</t:>

где Object соответствует ObjectType, вы можете ожидать, что вы сможете получить доступ к objectTypeString на любом ObjectInstance. Но компилятор говорит, что Type T has no member objectTypeString, когда к этому члену обращается какой-то общий тип, который наследует от Object, как показано в приведенном выше коде. Когда функция не является общей и просто переходит в параметр Object, нет проблемы. Итак, почему параметр должен быть общим, поэтому я не могу получить доступ к члену протокола, к которому должен иметь доступ соответствующий класс?

Я столкнулся с этим вопросом здесь, но меня не интересуют обходные пути, я просто хотел бы понять, что это касается общей системы, которая делает мой пример не работа. (Простым обходным путем является )

1 ответ

Возможно, я ошибаюсь, или я не понял ваш вопрос полностью, но я думаю, что вам может не хватать начало "объекта".

ваш код желания может быть приведен ниже:

protocol ObjectType {
 var title: String { get set }
}
extension ObjectType {
 var objectTypeString: String {
 let mirror = Mirror(reflecting: self)
 return "\(mirror.subjectType)"
 }
}
class Object: ObjectType {
 var title = ""
}
class SomeOtherClass {
 private func someFunc<t: object="">(object: T) {
 let object = Object()
 print(object.objectTypeString)
 }
}
</t:>

но дело в том, что даже если мы не инициируем объект, автозаполнение возвращает объектTypeString! что я не понимаю, и, как вы сказали, может быть, там, где происходит ошибка!

надеюсь, что это поможет < 3

licensed under cc by-sa 3.0 with attribution.