Protocol 'xxx' 只能用作泛型约束,因为它有 Self 或关联类型要求
Protocol 'xxx' can only be used as a generic constraint because it has Self or associated type requirements
我想使用自定义 delegate/dataSource 方法创建自定义 UITableView
。我还想在这样做时传递数据源的类型。这是我尝试过的:
struct TestModel {
var name: String
}
protocol TestTableViewDelegate: UITableViewDelegate {
associatedtype CellModel
func cell(model: CellModel, path: IndexPath) -> UITableViewCell
}
class TestTableView: UITableView {
var testDelegate: TestTableViewDelegate?
}
class VCTest: UIViewController, TestTableViewDelegate {
typealias CellModel = TestModel
var t: TestTableView!
override func viewDidLoad() {
t.testDelegate = self
}
func cell(model: TestModel, path: IndexPath) -> UITableViewCell {
return UITableViewCell()
}
}
我在 testDelegate
声明行遇到错误:
Protocol 'TestTableViewDelegate' can only be used as a generic constraint because it has Self or associated type requirements
我不太明白这是怎么回事。这是什么意思,我该如何解决?
感谢您的帮助。
您需要处理 swift 通用且简单的方法是删除 Associate 类型。
protocol TestTableViewDelegate: UITableViewDelegate {
func cell<T>(model: T, path: IndexPath) -> UITableViewCell
}
class TestTableView: UITableView {
var testDelegate: TestTableViewDelegate?
}
class VCTest: UIViewController, TestTableViewDelegate {
func cell<TestModel>(model: TestModel, path: IndexPath) -> UITableViewCell {
return UITableViewCell()
}
var t: TestTableView!
override func viewDidLoad() {
t.testDelegate = self
}
}
另一种测试方式(不确定结果):
class TestTableView<TestTableViewDelegate>: UITableView {
var testDelegate: TestTableViewDelegate?
}
class VCTest: UIViewController, TestTableViewDelegate {
typealias CellModel = TestModel
var t: TestTableView<Any>!
override func viewDidLoad() {
t.testDelegate = self
}
func cell(model: TestModel, path: IndexPath) -> UITableViewCell {
return UITableViewCell()
}
}
我想使用自定义 delegate/dataSource 方法创建自定义 UITableView
。我还想在这样做时传递数据源的类型。这是我尝试过的:
struct TestModel {
var name: String
}
protocol TestTableViewDelegate: UITableViewDelegate {
associatedtype CellModel
func cell(model: CellModel, path: IndexPath) -> UITableViewCell
}
class TestTableView: UITableView {
var testDelegate: TestTableViewDelegate?
}
class VCTest: UIViewController, TestTableViewDelegate {
typealias CellModel = TestModel
var t: TestTableView!
override func viewDidLoad() {
t.testDelegate = self
}
func cell(model: TestModel, path: IndexPath) -> UITableViewCell {
return UITableViewCell()
}
}
我在 testDelegate
声明行遇到错误:
Protocol 'TestTableViewDelegate' can only be used as a generic constraint because it has Self or associated type requirements
我不太明白这是怎么回事。这是什么意思,我该如何解决?
感谢您的帮助。
您需要处理 swift 通用且简单的方法是删除 Associate 类型。
protocol TestTableViewDelegate: UITableViewDelegate {
func cell<T>(model: T, path: IndexPath) -> UITableViewCell
}
class TestTableView: UITableView {
var testDelegate: TestTableViewDelegate?
}
class VCTest: UIViewController, TestTableViewDelegate {
func cell<TestModel>(model: TestModel, path: IndexPath) -> UITableViewCell {
return UITableViewCell()
}
var t: TestTableView!
override func viewDidLoad() {
t.testDelegate = self
}
}
另一种测试方式(不确定结果):
class TestTableView<TestTableViewDelegate>: UITableView {
var testDelegate: TestTableViewDelegate?
}
class VCTest: UIViewController, TestTableViewDelegate {
typealias CellModel = TestModel
var t: TestTableView<Any>!
override func viewDidLoad() {
t.testDelegate = self
}
func cell(model: TestModel, path: IndexPath) -> UITableViewCell {
return UITableViewCell()
}
}