ジェネリック薬を使用している問題があります。ジェネリックのスウィフトリターン構造体
私は、プロトコル持っている:私は私が望むものをこの構造体にTableViewSectionReusableSupplementraryViewFactory
public struct TableViewSectionReusableSupplementraryViewFactory<T: SectionReusableView> {
public var adapter: T.AdapterType
public init(adapter: T.AdapterType) {
self.adapter = adapter
}
}
を持ってSectionReusableView
public protocol SectionReusableView {
associatedtype AdapterType: SectionReusableViewAdapter
var adapter: AdapterType? { get set }
}
はどれTableViewSectionReusableSupplementraryViewFactory
指定されたタイプT
func supplementaryViewFactory<T>(at index: Int,
within tableView: UITableView) -> TableViewSectionReusableSupplementraryViewFactory<T>? {
let adapter = self.adapter(at: index, within: tableView)
let reuseIdentifier = self.reuseIdentifier(at: index)
switch reuseIdentifier {
case AwesomeReusableView.AwesomeReusableViewReuseIdentifier:
guard let adapter = adapter as? AwesomeReusableViewAdapter else { return nil }
return TableViewSectionReusableSupplementraryViewFactory<AwesomeReusableView>(adapter: adapter)
default:
return nil
}
}
しかし、私はこのエラーを取得し、私は一般的な機能の使用方法ではありません
error: cannot convert return expression of type
'TableViewSectionReusableSupplementraryViewFactory<AwesomeReusableView>' to return
type 'TableViewSectionReusableSupplementraryViewFactory<T>?'
ありがとう:)しかし、私はそれを好きではない、supplementaryViewFactoryを呼び出すクラスはどのタイプを特化するか分からない。 だから、私は "Any" TableViewSectionReusableSupplementaryViewFactory – Pwyll28
@ Pwyll28を返そうと思っていたので、私は多くのことを考えました。その場合、ジェネリックスから遠ざかり、単純なジェーンプロトコルを使用することをお勧めします。または、ジェネリックを保持したい場合は、メイン構造体に、ファクトリメソッドの戻り値の型であるプロトコルを実装させ、をそれから削除してください – utahwithak
しかし、このメソッドのポイントはのファクトリを返すことですまたはまたはを使用して、他のクラスのUITableViewDelegate/Datasourceメソッドを実装するためにファクトリを使用します@utahwithak –
Pwyll28