1

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
    }
}
4

2 に答える 2

3

私のコメントを超えて。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 }
}

このプロトコルに準拠するすべてのオブジェクトは、変数 (let 定数ではない)を持つ必要potatoがあります。この変数は型Stringであり、暗黙的にアンラップされます。そのようです:

class PotatoFarmer: Farmer, hasAVariablePotato {

}

上記のクラスはクラスPotatoFarmerを継承していますが、 varがないため準拠していません。したがって、上記はエラーを生成します:FarmerhasAVariablePotatopotato

タイプ「PotatoFarmer」はプロトコル「hasAVariablePotato」に準拠していません

このエラーを修正するには、プログラマは次のようにプロトコルのプロパティとメソッドを追加する必要があります。

class PotatoFarmer: Farmer, hasAVariablePotato {
   var potato: String!
}

プロトコルに準拠しているため、エラーは表示されなくなります。

あなたの状況では、 と の別々のサブクラスを作成したいと考えてます。ここでこのチェックを行う方法を確認するには (このテーマに関する素晴らしい無料チュートリアル): https://www.raywenderlich.com/107439/uicollectionview-custom-layout-tutorial-pinterestUICollectionViewLayoutUICollectionViewLayoutAttributes

于 2016-06-26T17:23:04.613 に答える