-1

私のアプリでは、関数を使用する必要があるため、プロトコルVideoを実装するクラスがあります。私のクラスは次のとおりでした:Equatable==(lhs:,rhs:) -> Bool

class Video: Equatable {
    var url: URL!
    // Some other vars
}

func ==(lhs: Video, rhs: Video) -> Bool {
    return lhs.url == rhs.url
}

それは常に私にとってはうまくいきましたが、一部のユーザーは理由でクラッシュしましたprotocol witness for static Equatable.== infix(A, A) -> Bool in conformance Video

だから私はこの機能を実装する別の方法を試しました

class Video {
    var url: URL!
    // Some other vars
}

extension Video: Equatable {
    static func ==(lhs: Video, rhs: Video) -> Bool {
        return lhs.url == rhs.url
    }
}

しかし、一部のユーザーでは依然としてクラッシュが発生し、その理由がわかりません...誰かがすでにこの問題を抱えているか、解決方法を知っていますか?

4

2 に答える 2

2

あなたurlはできるのでnil、の実装でこのケースを考慮する必要があります==

func ==(lhs: Video, rhs: Video) -> Bool {
    guard let lURL = lhs.url, let rURL = rhs.url else { return false }
    return lURL == rURL
}

nil両方のURL を持つ 2 つのオブジェクトを同じものとして扱う設計の場合は、このケースも追加する必要があります。

于 2016-12-07T09:28:23.127 に答える
0

実際、URL が nil の場合については考えていませんでした...私の Video クラスにもアセットがあるため、URL が nil の場合は、2 つのアセットの比較を返します。ありがとう

于 2016-12-07T09:48:52.983 に答える