Swift 在这种情况下,我不能推断的类型是什么?
我有一个协议:Swift 在这种情况下,我不能推断的类型是什么?,swift,Swift,我有一个协议: protocol Model {} struct Foo: Model {} 和使用此协议的结构: protocol Model {} struct Foo: Model {} 然后我有一个不同的协议和一个通用的: protocol Controller { func fun<T: Model>() -> Observable<T> } 调用Bar().fun()现在将给出错误:无法推断通用参数“Foo” 有两件事我不明白。第一个问
protocol Model {}
struct Foo: Model {}
和使用此协议的结构:
protocol Model {}
struct Foo: Model {}
然后我有一个不同的协议和一个通用的:
protocol Controller {
func fun<T: Model>() -> Observable<T>
}
调用Bar().fun()
现在将给出错误:无法推断通用参数“Foo”
有两件事我不明白。第一个问题是,它如何知道我调用了指定Foo的实现,但同时无法推断类型?Foo不是泛型,它是Foo结构的实际类型。我不明白的第二件事,也是这里的实际问题,是如果我在一个实现并指定了泛型方法的实例上调用一个方法,为什么它不能推断出类型 首先,您需要修复
fun
方法的实现:
func fun<Foo>(_ type: Foo.Type) -> Observable<Foo> {
return Observable.create { observer in
let cancel = Disposables.create {
// clean up
}
return cancel
}
}
类栏:控制器{
func fun()->可观察{
返回可观察的。在中创建{observer
让cancel=Disposables.create{
//清理
}
退票取消
}
}
}
然后,您需要在调用者中推断泛型Foo
参数,如:
let observefo:observeable=Bar().fun()
我认为您的误解是将此方法中的Foo
误认为是Foo
结构:
func fun<Foo>() -> Observable<Foo> {
// return an observable
}
调用Bar().fun()时,只需调用一个没有参数的方法。该方法属于Bar,但看不到Foo结构。
func fun<Foo>() -> Observable<Foo> {
// return an observable
}
protocol Model {}
struct Foo: Model {}
protocol Controller {
associatedtype ModelType: Model
func fun() -> Observable<ModelType>
}
class Bar: Controller {
typealias ModelType = Foo
func fun() -> Observable<Foo> {
return Observable.create { observer in
let cancel = Disposables.create {
// clean up
}
return cancel
}
}
}