配列メソッドindex(of:)
を呼び出す際に問題があります。 MyClass
はUIViewController
から継承し、MyDelegate
プロトコルに準拠しています。Swift 4 'index'を引数リストで指定することはできません
//self.viewControllers: [(UIViewController & MyDelegate)]
guard let myController = viewController as? MyClass,
let index = self.viewControllers.index(of: myController) else {return}
、私はエラーを取得する:
Cannot invoke 'index' with an argument list of type '(of: (UIViewController & MyDelegate))'
どのように私はこの問題を解決するため、拡張子でindex(of:)
を実装するよりもよりよい解決策はありますか?
extension Array where Element == (UIViewController & MyDelegate) {
func index(of: Element) -> Int? {
for i in 0..<self.count {
if self[i] == of {
return i
}
}
return nil
}
}
私は、拡張子のないルートクラスの配列を持ち、 'index(of:)'を使うときに同じエラーが発生しています。 NSObjectから継承するルートクラスを作成すると、すべて正常に動作します。それはなぜですか? – jjatie
@jjatieあなたのルートクラスが 'Equatable'に準拠していない場合のように聞こえます。' NSObject'から継承すると、適合性が得られます(これはデフォルトでIDに基づいています)。あなたのクラスは 'Equatable'に準拠する必要があります。この場合、' NSObject'から継承する必要はありません。 – Hamish
愚かな私!ありがとうございました。 – jjatie