Rob*_*ado 6 generics protocols generic-programming swift
我正在努力做到这一点,但我遇到了一些麻烦
这是CustomProtocol
protocol CustomProtocol {
}
Run Code Online (Sandbox Code Playgroud)
SubCustomProtocol
protocol SubCustomProtocol: CustomProtocol {
}
Run Code Online (Sandbox Code Playgroud)
SubCustomProtocolImplementation
class SubCustomProtocolImplementation: SubCustomProtocol {
}
Run Code Online (Sandbox Code Playgroud)
这是CustomClass
class CustomClass<P: CustomProtocol> {
var customProtocol: P?
func doSomething() {
}
}
Run Code Online (Sandbox Code Playgroud)
SubCustomClass
class SubCustomClass<P: SubCustomProtocol>: CustomSubClass {
}
Run Code Online (Sandbox Code Playgroud)
和我的BaseViewController
class BaseViewController<P: CustomProtocol, T: CustomClass<P>>: UIViewController {
var foo: T!
override func viewDidLoad() {
super.viewDidLoad()
foo?.doSomething()
}
}
Run Code Online (Sandbox Code Playgroud)
我的ViewController
class ViewController<P: SubCustomProtocolImplementation, T: SubCustomClass<P>>: BaseViewController<P,T> {
override func viewDidLoad() {
super.viewDidLoad()
}
}
Run Code Online (Sandbox Code Playgroud)
在我称之为foo?.doSomething()的行中,它说'T'不是'CustomClass <'P'>'的子类型,我不知道我做错了什么
在ViewController声明中,它说"BaseViewController要求T继承自CustomClass <'P'>"
希望你能帮我!
如果您想指定您的 foo var 类型,CustomClass<P>您应该按照以下方式执行。
class ViewController<P: CustomProtocol>: UIViewController {
var foo: CustomClass<P>?
override func viewDidLoad() {
super.viewDidLoad()
foo?.doSomething()
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
55 次 |
| 最近记录: |