Проблема с использованием протокола здесь заключается в том, что функции не могут соответствовать протоколу, только классы, перечисления и структуры могут соответствовать протоколу. Поэтому вам нужен либо один из этих типов, либо экземпляр одного из этих типов, но тогда этот экземпляр кажется излишним. Если вы действительно хотите сделать это по протоколу, вот пример со статическим соответствием для перечисления:
import UIKit
protocol Callable {
static func call(someString: String, someInt: Int)
}
enum MyCallable: Callable {
static func call(someString: String, someInt: Int) {
print(someString, someInt)
}
}
func someFunction<T: Callable>(callable: T.Type) {
callable.call(someString: "a",someInt: 1)
}
someFunction(callable: MyCallable.self)