На самом деле Вы можете сделать это.
Если вы видели Codable
в быстром режиме, это на самом деле Decodable
и Encodable
typealias Codable = Decodable & Encodable
Так что в некоторых функциях, если вы используете универсальный T в качестве Codable
struct StructOfCodable<T:Codable>: Codable {
....
}
Вот пример
protocol Test {}
class TClass {
}
typealias Common = Test & TClass
func generic <T:Common>(method:T) {
}
Другой способ - протокол и класс, оба могут иметь суперкласс.Таким образом, вы можете создать общий протокол
как
protocol CommonInProtocolAndStruct { }
protocol ProtocolUsedAsConstraint:CommonInProtocolAndStruct {}
struct StructUsedAsConstraint:CommonInProtocolAndStruct {}
И любой метод, который вы можете использовать CommonInProtocolAndStruct
в качестве общего ограничения