我想使用自定义委托/数据源方法创建自定义 val sourcePath = Paths.get("C:/Users/DGH/Pictures/TestImages/test.txt");
val targetPath = Paths.get("C:/Users/DGH/Pictures/TestOutputImages/test.txt");
Files.move(sourcePath, targetPath, StandardCopyOption.REPLACE_EXISTING);
。我还想在传递数据源的类型时这样做。这是我尝试过的:
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()
}
}
声明行出现错误:
协议“ TestTableViewDelegate”只能用作通用约束,因为它具有“自我”或关联的类型要求
我不太了解这里发生了什么。这是什么意思,我该如何解决?
感谢您的帮助。
答案 0 :(得分:2)
您需要处理迅速的通用且简单的方法是删除“关联”类型。
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()
}
}