Xcode 8で、UICollectionViewControllerとUICollectionViewLayoutのサブクラスを作成しようとしていますが、エラーが発生します。
クラス「UICollectionViewController」および「UICollectionViewLayout」からの多重継承
しかし、彼らは異なる親クラスを持っています。カスタムサイズのセルを並べ替えるために、http://nshint.io/blog/2015/07/16/uicollectionviews-now-have-easy-reordering/チュートリアルに従おうとしています。
class WordCollectionViewController: UICollectionViewController, UICollectionViewLayout {
// ...
override func invalidationContext(forInteractivelyMovingItems targetIndexPaths: [IndexPath], withTargetPosition targetPosition: CGPoint, previousIndexPaths: [IndexPath], previousPosition: CGPoint) -> UICollectionViewLayoutInvalidationContext {
var context = super.invalidationContext(forInteractivelyMovingItems: targetIndexPaths, withTargetPosition: targetPosition, previousIndexPaths: previousIndexPaths, previousPosition: previousPosition)
return context
}
}
私のコメントを超えて。Swiftは多重継承をサポートしていません。UICollectionViewLayout
はクラスであるため、WorldCollectionViewController
はすでに継承しているため、継承するUICollectionViewController
ことはできません(継承しUICollectionViewLayout
たくない場合もあります)。この:
class ViewController: UIViewController, UITextFieldDelegate {
}
は多重継承ではなくUIViewController
、プロトコルへの適合性からの単一の継承ですUITextFieldDelegate
。
プロトコルとは何か、およびそれらの使用方法について詳しくは、https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Protocols.htmlをご覧ください。
基本的に、プロトコルは一連のガイドラインのようなものです。これらのガイドラインは、メソッドとプロパティを指定します。クラスがプロトコルに準拠している場合は、プロトコルのガイドラインに記載されているメソッドとプロパティを実装する必要があります。例えば:
protocol hasAVariablePotato {
var potato: String! { get set }
}
このプロトコルに準拠していることは、任意のオブジェクトしなければならない変数(ないようにしましょう定数)を持つpotato
タイプであるString
と暗黙的に開封されています。そのようです:
class PotatoFarmer: Farmer, hasAVariablePotato {
}
上記PotatoFarmer
のクラスの継承Farmer
クラスとが、一致していないにhasAVariablePotato
何もありませんので、potato
varは!したがって、上記はエラーを生成します:
タイプ「PotatoFarmer」はプロトコル「hasAVariablePotato」に準拠していません
このエラーを修正するには、プログラマーは次のようにプロトコルのプロパティとメソッドを追加する必要があります。
class PotatoFarmer: Farmer, hasAVariablePotato {
var potato: String!
}
プロトコルに準拠しているため、エラーは表示されなくなります。
状況に応じて、との個別のサブクラスを作成する必要がUICollectionViewLayout
ありUICollectionViewLayoutAttributes
ます。このチェックを行う方法については、こちらをご覧ください(このテーマに関するすばらしい無料チュートリアル):https://www.raywenderlich.com/107439/uicollectionview-custom-layout-tutorial-pinterest
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加