3

Swift の 2 種類のデータに対してまったく同じことを行うメソッドがあります。

単純にするために (メソッドを複製せずに) AnyObject、これら 2 つのタイプのいずれかであるメソッドに引数として渡します。||続行できるように (OR) ステートメントでラップを解除するにはどうすればよいですか? それとも、これは別の方法で行われたのでしょうか?

func myFunc(data:AnyObject) {

    if let data = data as? TypeOne {
        // This works fine. But I need it to look something like unwrapping below
    }

    if let data = data as? TypeOne || let data = data as? TypeTwo { // <-- I need something like this
        // Do my stuff here, but this doesn't work
    }

}

これは Swift では些細なことだと思いますが、それを機能させる方法がわかりません。

4

4 に答える 4

0

その共有コードが両方のタイプでまったく同じかどうかを調べます。もし、そうなら:

protocol TypeOneOrTypeTwo {}

extension TypeOneOrTypeTwo {

    func thatSharedCode() {

        print("Hello, I am instance of \(self.dynamicType).")
    }
}

extension TypeOne: TypeOneOrTypeTwo {}
extension TypeTwo: TypeOneOrTypeTwo {}

そうでない場合:

protocol TypeOneOrTypeTwo {

    func thatSharedMethod()
}

extension TypeOne: TypeOneOrTypeTwo {

    func thatSharedMethod() {

        // code here:
    } 
}

extension TypeTwo: TypeOneOrTypeTwo {

    func thatSharedMethod() {

        // code here:
    } 
}

そして、ここに行きます:

func myFunc(data: AnyObject) {

    if let data = data as? TypeOneOrTypeTwo {

        data.thatSharedCode() // Or `thatSharedMethod()` if your implementation differs for types.
    }
}
于 2016-03-30T14:13:51.307 に答える