У меня есть несколько быстрых структур, для которых соответствие протоколу создается с помощью отдельных расширений с одинаковыми именами методов, которые отличаются только типами возврата, которые зависят от структуры. Вдобавок к этому я хочу использовать их в общей функции, которая вызывает функцию, соответствующую протоколу для универсального типа). Я пытался сделать это так: //: Детская площадка - существительное: место, где люди могут играть
import UIKit
protocol FooProt {
typealias T;
static func createMe<T>()->T;
}
struct FooStruct{
}
extension FooStruct: FooProt{
typealias T = FooStruct;
static func createMe () -> FooStruct{
return FooStruct();
}
}
class Creator{
fun createOne<T where T:FooProt>(type:T.Type){
let instance = T.createMe();
}
}
К сожалению, я получаю следующую ошибку: /var/folders/sn/78_zvfd15d74dzn01mdv258h0000gq/T/./lldb/3741/playground6.swift:7: 17: note: протокол требует функцию createMe () с типом '() -> T '(aka' ‹τ
import UIKit
protocol FooProt {
typealias T;
static func createMe<T>()->T;
}
struct FooStruct{
}
extension FooStruct: FooProt{
typealias T = FooStruct;
static func createMe () -> FooStruct{
return FooStruct();
}
}
class Creator{
fun createOne<T where T:FooProt>(type:T.Type){
let instance = T.createMe();
}
}
0> () -> τimport UIKit
protocol FooProt {
typealias T;
static func createMe<T>()->T;
}
struct FooStruct{
}
extension FooStruct: FooProt{
typealias T = FooStruct;
static func createMe () -> FooStruct{
return FooStruct();
}
}
class Creator{
fun createOne<T where T:FooProt>(type:T.Type){
let instance = T.createMe();
}
}
0 ') статическая функция createMe () -> T;
Что именно здесь не соответствует и есть ли обходной путь?