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

НАбор правил декларируется именно в протоколе.

protocol fullyName{
var fullName: String { get }
}
struct Person: fullyName {
var fullName: String
var age: Int
}
class Company: fullyName {
var fullName: String

init(fullName: String) {
self.fullName = fullName
}
}

Можно создавать массивы м типом протокола. И пихать туда классы соответсвующими этому протокоу

var clients = [fullyName]()